Поднятие события после Parallel.For завершает работу - PullRequest
1 голос
/ 11 сентября 2011

После нажатия кнопки вызывается следующая функция.

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 .

Ответы [ 2 ]

4 голосов
/ 11 сентября 2011

Используйте Dispatcher

txbDebug.Dispatcher.Invoke(new Action(() =>
{
    txbDebug.Text = "completed";
}));
2 голосов
/ 12 сентября 2011

Я не ожидаю, что вы захотите использовать новую Async CTP , но если вам интересно, как это будет сделано с новыми ключевыми словами async и await, предложенными для C # 5, тогда подумайте следующий пример. Это действительно не становится более элегантным, чем это.

void async YourButton_Click(object sender, RoutedEventArgs args)
{
  txbDebug.Text = await Task<string>.Factory.StartNew(
    () =>
    {
      Parallel.For(0, cyclesCount, i => DoWork(i));
      return "complete";
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...