通常的做法是在UI线程中显示进度窗口(带进度条)并从工作线程更新进度。
我有很多长操作,它们在GUI线程本身启动并运行(暂时冻结GUI)。要求是显示所有现有长操作的进度条。通常的解决方案是将长操作作为线程移动并从那里更新进度。但我不确定这些长期操作的线程安全性。
有没有办法在另一个线程中显示进度窗口(因此它不会冻结),然后从主GUI线程本身更新进度?
答案 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()