我有一个winform应用程序,它有一个数据库操作。我希望显示一个特殊的表单,如
,而不是默认的UI阻止效果 System is processing. please wait
告诉用户系统正在运行。所以基本上我并不是在寻找真正的响应式用户界面。我仍然想阻止UI。我已经使用backgroundworker组件实现了这个目标。连接完成的回调,然后在按钮单击事件处理程序中调用RunWorkerAsync
,showdialog处理表单。然后在完成的回调中,关闭处理表单。
我想知道是否可以使用新的async / await机制实现这种情况。我对此表示怀疑。
答案 0 :(得分:2)
您所谓的阻止UI的行为并未阻止UI。阻止UI线程意味着停止消息处理,以便UI不能更改并对输入作出反应。如果检测到这个窗口,窗口通常会被幻影显示。
您想要显示模态对话框。您可以使用BackgroundWorker
或使用async
和await
以更现代的方式执行此操作。例如:
void MyClickHandler(...) {
var form = new MyForm();
Task myAsyncOperation = StartOperationAsync(form);
form.ShowDialog();
await myAsyncOperation;
}
async Task StartOperationAsync(Form formToClose) {
await DoSomething();
formToClose.Close();
}
所有这些代码都在UI线程上进行了多路复用。线程安全不是问题。