在Parallel之后引发事件.完成工作

本文关键字:工作 事件 Parallel 之后 | 更新日期: 2023-09-27 18:08:19

按下按钮后调用以下函数

Task.Factory.StartNew(() => 
{ 
    Parallel.For(0, cyclesCount, i => DoWork(i));
    if (OnJobCompleted != null)
        OnJobCompleted(this, EventArgs.Empty);                
});

代码中还有

void ladder_OnJobCompleted(object sender, EventArgs args)
{
    txbDebug.Text = "completed";
}
我知道

txbDebug.Text = "completed";

必须被调用,因为我在不同的线程上引发事件。但我不知道如何调用它。此事件位于wpf格式中。

在Parallel之后引发事件.完成工作

使用Dispatcher

txbDebug.Dispatcher.Invoke(new Action(() =>
{
    txbDebug.Text = "completed";
}));

我不希望你想要使用新的异步CTP,但是如果你好奇如何使用c# 5中提出的新的asyncawait关键字,那么考虑下面的例子。没有比这更优雅的了。

void async YourButton_Click(object sender, RoutedEventArgs args)
{
  txbDebug.Text = await Task<string>.Factory.StartNew(
    () =>
    {
      Parallel.For(0, cyclesCount, i => DoWork(i));
      return "complete";
    });
}
相关文章: