哪些方法可用于使线程等待事件然后继续执行?

MGS*_*oto 16 .net c# events multithreading event-handling

我有一个运行的线程,委托一些任务.单个任务完成后,会发出一个事件,说明它已完成.这些任务需要按特定顺序运行,需要等待上一个任务完成.如何让线程等到收到"任务完成"事件?(除了设置标志的明显的事件处理程序,然后是循环轮询标志的while循环)

Fre*_*örk 28

AutoResetEvent当我需要等待异步任务完成时,我经常使用等待句柄:

public void PerformAsyncTasks()
{
    SomeClass someObj = new SomeClass()
    AutoResetEvent waitHandle = new AutoResetEvent(false); 
    // create and attach event handler for the "Completed" event
    EventHandler eventHandler = delegate(object sender, EventArgs e) 
    {
        waitHandle.Set();  // signal that the finished event was raised
    } 
    someObj.TaskCompleted += eventHandler;

    // call the async method
    someObj.PerformFirstTaskAsync();    
    // Wait until the event handler is invoked
    waitHandle.WaitOne();
    // the completed event has been raised, go on with the next one
    someObj.PerformSecondTaskAsync();
    waitHandle.WaitOne();
    // ...and so on
}
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记,AutoResetEvent,WaitHandles等实现了IDisposable (2认同)

bdo*_*lan 5

一种选择是使用EventWaitHandle来表示完成.