Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用基于事件的异步模式时,如何让主线程等待其他线程?_C#_Multithreading - Fatal编程技术网

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,然后等待。有更好的办法吗?如果可能的话,我希望避免暴露它(因为耦合的原因)。你必须使用这种模式吗?如果你能用任务来代替,生活会变得更简单。