当使用基于事件的异步模式时,我如何让主线程等待其他线程

本文关键字:线程 其他 等待 模式 异步 于事件 事件 | 更新日期: 2023-09-27 18:19:13

我有一个主线程,它通过实现基于事件的异步模式(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(),但在生产代码中这似乎是一个糟糕的想法。

当使用基于事件的异步模式时,我如何让主线程等待其他线程

你可以使用一个简单的AutoResetEvent,在主方法中等待,然后在事件处理程序中设置。

如果你想等待特定次数的事件处理程序被调用,我猜你可以保留一个计数器,并设置自动复位事件,只有当你达到一定的阈值

我最终将通过调用WorkerEventHandler.BeginInvoke返回的所有IAsyncResutl对象放入一个列表中,然后将该列表公开给Main方法。在这里,我设置了需要侦听的所有asyncevents,然后使用WaitHandle.WaitAll等待事件完成。