Mui*_*uis 7 wpf user-interface dispatcher ui-thread
当你有一个按钮,并执行以下操作:
Private Function Button_OnClick
Button.Enabled = False
[LONG OPERATION]
End Function
Run Code Online (Sandbox Code Playgroud)
然后该按钮不会变灰,因为长操作会阻止UI线程重新绘制控件.我知道正确的设计是启动后台线程/调度程序,但有时这对于简单的操作来说太麻烦了.
那么如何强制按钮在禁用状态下重绘?我在Button上尝试了.UpdateLayout(),但它没有任何效果.我也尝试过使用WinForms时通常可以正常工作的System.Windows.Forms.DoEvents(),但它也没有效果.
以下代码将执行您正在寻找的内容.但是我不会用它.使用BackgroundWorker类进行长时间操作.它易于使用且非常稳定.
这里的代码:
public static void ProcessUITasks() {
DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
frame.Continue = false;
return null;
}), null);
Dispatcher.PushFrame(frame);
}
Run Code Online (Sandbox Code Playgroud)
在这里,您将找到有关如何使用BackgroundWorker的示例.
| 归档时间: |
|
| 查看次数: |
9774 次 |
| 最近记录: |