等待事件结束(线程)

时间:2013-12-11 09:41:21

标签: c# .net wpf multithreading

我需要等待一个事件完成才能继续。

这是我的代码:

foreach (KeyValuePair<string, Stream> pair in this.XMLCollection)
{
    ...
    this.eventAggregator.GetEvent<LogToApplicationEvent>().Publish(credentials);
    //wait 
    ...
}

在继续之前,我需要等待“登录”事件才能执行。 我尝试使用Task.Factory,但它对我不起作用,或者我无法正确使用它......

此代码位于演示者,但该事件会更新主UI。

//publish
public virtual void Publish(TPayload payload)
{
   base.InternalPublish(payload);
}

2 个答案:

答案 0 :(得分:2)

Event Aggregator发布和订阅活动模式为synchronous。你不用担心它。

因此,在订阅者完成其委托的执行之前,它不会恢复。

假设 - 您使用的是Microsoft提供的内置Event Aggregator课程。

答案 1 :(得分:2)

至少有两种可能的解决方案:

BackgroundWorker的

使用BackgroundWorker执行代码,并使用RunWorkerCompleted事件执行完成后运行的代码。

BackgroundWorker将基于事件的异步模式包装成一个非常易于使用的机制,完成进度报告和取消。请参阅此BackgroundWorker tutorial以及此SO答案。

任务(.NET 4.0及更高版本)

使用Task对象,并使用ContinueWith方法定义完成第一个任务后需要执行的代码。