C# Can';后台工作人员正在进行时,不要停止表单关闭

C# Can';后台工作人员正在进行时,不要停止表单关闭,c#,forms,C#,Forms,我在c#winforms应用程序(Visual Studio 2010,.net 4)中有一个带有后台工作程序的表单。当后台工作人员忙时,我想提醒用户在尝试关闭表单和取消表单关闭时停止此操作。我想在表单关闭事件中通过将表单关闭取消设置为true来处理它 但它仍然关闭表单 以下是我使用的代码片段: private void FormDrivenDistance_FormClosing(object sender, FormClosingEventArgs e) { if (myBackgrou

我在c#winforms应用程序(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;
  }
} 
虫子在哪里


提前谢谢

如果您在发送邮件之前移动e.取消怎么办

请注意,如果您试图阻止争用条件并停止在工作进程完成之前关闭窗体时导致的InvalidOperationException,则它不会100%这样做;您可以在完成本身(InProgress现在为false)和回调(OnWorkerCompleted)之间的时间间隔内关闭它。您仍然需要以任何一种方式处理异常


由于您必须以任何一种方式处理它,您也可以让用户关闭表单。用户必须等待他们不关心的事情完成,这是一件麻烦事。

您确定
myBackgroundWorker.IsBusy
返回
true
?您是否尝试过在支票内设置断点以确保它被调用

您确定活动已正确连接吗

如果这些都是真的,那么bug就必须出现在代码的其他部分


FormClosing
上可能还有其他处理程序将
Cancel
设置为
false
,但这种情况可能不太可能发生。

是的,我确信,除此之外,一切正常,isbusy返回true。是,事件已正确连接。@Tamas当您在
e.Cancel=true上设置断点时会发生什么并单步执行代码?它只会关闭表单,即使cancel设置为true。总而言之,我找到了这个bug的原因:我使用一个开源UI组件来创建像IDE()这样的Visual Studio,正如我现在看到的,它导致了这个问题,它在后台关闭表单时使用了一些技巧,并且没有以正确的方式使用cancel。。。不幸的是,我需要这个组件,也需要取消。。。再次感谢你的帮助@Tamas如果删除
Messenger.ShowCriticalMessage
行,它是否有效?除非在该方法中出现了一些奇怪的情况,否则如果您所说的是真的,它应该会起作用。@Tamas在代码项目的文章中确实提到,如果您在该页面上搜索“阻止表单关闭”,您应该如何阻止他们的表单关闭。你试过了吗?谢谢你的回答,但对我来说听起来真的很糟糕。我只想取消表格结帐,不想再取消了。不应该这么棘手。这就像用F14雄猫猎鸽……无论如何,谢谢你的帮助!;)