显示进度条:反过来

时间:2012-09-12 07:04:14

标签: c# wpf multithreading thread-safety progress-bar

通常的做法是在UI线程中显示进度窗口(带进度条)并从工作线程更新进度。

我有很多长操作,它们在GUI线程本身启动并运行(暂时冻结GUI)。要求是显示所有现有长操作的进度条。通常的解决方案是将长操作作为线程移动并从那里更新进度。但我不确定这些长期操作的线程安全性。

有没有办法在另一个线程中显示进度窗口(因此它不会冻结),然后从主GUI线程本身更新进度?

2 个答案:

答案 0 :(得分:1)

我不知道在另一个线程中显示ProgressBar的解决方案,但是您可以尝试让您的系统在长时间运行的操作中执行其操作(更新UI)。为此,您可以在长时间运行的操作中重复调用以下函数:

public static void DoEvents() {
  DispatcherFrame frame = new DispatcherFrame();
  Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
    frame.Continue = false;
    return null;
}), null);
  Dispatcher.PushFrame(frame);
}

但请注意,这不是解决问题的好方法。最好选择合适的设计。

答案 1 :(得分:1)

选中此thread

我认为你应该使用Application.DoEvents()