使用lambda表达式时,Dispatcher Invoke不会执行

时间:2014-11-02 12:03:29

标签: c# wpf multithreading lambda dispatcher

我对调度员不太熟悉,但我认为我已经解决了问题。

然而现在我看到一些我真的不明白的东西,并且想到我应该问这里是否有人可以解释,因为它变得非常令人沮丧。

我试图从另一个线程更新我的WPF窗口中进度条的最大值。 所以我使用Dispatcher来调用该方法。

这是我的代码:

_progressBarDialog.ProgressBar1.Dispatcher.Invoke(new Action<int>((x)=>
{
   _progressBarDialog.ProgressBar1.IsIndeterminate = false;
      if (_progressBarDialog.ProgressBar1.Value > x)
          _progressBarDialog.ProgressBar1.Value = x;
      _progressBarDialog.ProgressBar1.Maximum = x;
}),DispatcherPriority.Send,max);

问题在于它有时会起作用,有时程序会暂停。我知道Invoke方法是同步执行的,因此主线程在被调用时暂停,如果我使用BeginInvoke,主线程可以继续,但事实上的问题是调度程序从不执行代码,这就是为什么一切都停止。如果我使用BeginInvoke,稍后当我尝试将进度条设置为大于最大值的值时,我会遇到问题。

我尝试了不同的调度员优先级。 我觉得我的参数有些问题,但我真的不明白。

任何帮助都非常感激,因为我已经不在乎了!

编辑:由于某种原因,我摆弄DispatcherPriority后开始工作。 我甚至回到了没有那个论点的调度员,它仍然有效。 任何想法为什么会发生这种情况仍然非常受欢迎,因为我不知道为什么它现在有效,而不是之前,这让我觉得代码真的不可靠。

0 个答案:

没有答案