我在c#winforms应用程序中有一个带后台worker的表单(Visual Studio 2010,.net 4)。当后台工作人员忙时,我想在尝试关闭表单并取消表单关闭时向用户发出警告。我想通过将表单关闭取消设置为true来处理表单关闭事件。
但它仍然关闭表格!
以下是我使用的代码段:
private void FormDrivenDistance_FormClosing(object sender, FormClosingEventArgs e)
{
if (myBackgroundWorker.IsBusy)
{
Messenger.ShowCriticalMessage("Don't close, in progress!");
e.Cancel = true;
}
}
错误在哪里?!
提前致谢!
答案 0 :(得分:2)
您确定myBackgroundWorker.IsBusy
会返回true
吗?您是否尝试在支票内设置断点以确保它被调用?
您确定该事件已正确连接吗?
如果这些都是真的,那么bug就必须出现在代码的其他部分。
FormClosing
设置Cancel
到false
可能还有其他一些处理程序,但这种情况可能不太可能。
答案 1 :(得分:0)
如果您在留言之前移动e.Cancel怎么办?
请注意,如果您试图阻止竞争条件并停止在工作人员完成之前表单关闭时导致的InvalidOperationException,则不会100%这样做;你可以在完成本身(InProgress现在为假)和回调(OnWorkerCompleted)之间的间隔中关闭它。您仍然需要以任何方式处理异常。
由于你必须以任何一种方式处理它,你也可以让用户关闭表单。用户必须等待完成他们不关心的事情,这是一件令人讨厌的事。