0

我有一个主线程,它通过一个实现基于事件的异步模式(http://msdn.microsoft.com/en-us/library/ms228969.aspx)的类启动一些工作线程。不幸的是,一旦主线程完成了工作线程的设置,它就会退出。

我希望主线程无限期地等待,直到anEventHandler调用该方法,然后处理该方法。无限期地asyncevents监听事件直到被取消,所以他们可能会anEventHandler在完成之前多次调用该方法。

注意:没有相关的 GUI,我只是使用这种模式。

   public static void Main(String[] args) {
        AsyncEventClass asyncevent = new AsyncEventClass();

        // setup event handling
        asyncevent.Events += new EventsHandler(anEventHandler);

        // start event monitoring threads
        asyncevent.monitorAsync(1);
        asyncevent.monitorAsync(2);
        asyncevent.monitorAsync(3);

        System.Console.WriteLine("The main thread now ends. :(");
    }

所有在线示例都使用System.Console.ReadLine(),但这在生产代码中似乎是一个糟糕的主意。

4

2 回答 2

2

您可以使用在 main 方法中等待的简单AutoResetEvent ,并在事件处理程序中进行设置。

如果您想等待调用事件处理程序的特定次数,我想您可以保留一个计数器,并仅在达到某个阈值时设置自动重置事件。

于 2013-06-20T06:26:10.993 回答
0

我最终将IAsyncResutl调用返回的所有对象WorkerEventHandler.BeginInvoke放入一个列表中,然后将该列表暴露给该Main方法。在那里,我设置了我需要监听的所有异步事件,然后用于WaitHandle.WaitAll等待事件完成。

于 2013-06-21T23:03:46.040 回答