C# 在使用基于事件的异步模式时,如何让主线程等待其他线程?
我有一个主线程,它通过实现基于事件的异步模式()的类启动几个工作线程。不幸的是,一旦主线程设置完辅助线程,它就会退出 我希望主线程无限期地等待,直到调用C# 在使用基于事件的异步模式时,如何让主线程等待其他线程?,c#,multithreading,C#,Multithreading,我有一个主线程,它通过实现基于事件的异步模式()的类启动几个工作线程。不幸的是,一旦主线程设置完辅助线程,它就会退出 我希望主线程无限期地等待,直到调用anEventHandler方法,然后处理该方法。asyncevents会无限期地侦听事件,直到取消为止,因此它们可能会在完成之前多次调用anEventHandler方法 注意:没有相关的GUI,我只是使用这个模式 public static void Main(String[] args) { AsyncEventClas
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()
,但这在生产代码中似乎是一个糟糕的想法。您可以使用一个简单的方法,在main方法中等待,并在事件处理程序中设置
如果您想等待调用eventhandler的特定次数,我想您可以保留一个计数器,并仅在达到某个阈值时设置自动重置事件。我最终将调用
WorkerEventHandler.BeginInvoke
返回的所有IAsyncResutl
对象放入列表,然后将该列表公开给Main
方法。在那里,我设置了需要侦听的所有asyncevents,然后使用WaitHandle.WaitAll
等待事件完成。我想我可以通过实现基于事件的异步模式来公开AsyncEventClass创建的IAsyncResult,然后等待。有更好的办法吗?如果可能的话,我希望避免暴露它(因为耦合的原因)。你必须使用这种模式吗?如果你能用任务来代替,生活会变得更简单。