ShowDialogNotBlockingCallers我有一个强命名程序集。之前有人问过这个问题......但只是为了不同的目的。我有一个表单基类。当实现类在基类IsBusy上设置属性时。我想阻止与表单的所有交互(设置Enabled=false是不够的-我还想阻止移动,调整大小,关闭等......我不希望我的控件显示为禁用并在IsBusy==true弹出加载表单(带有加载动画的透明无边框表单)。在我的加载动画表单上调用ShowDialog会阻止调用表单上的交互......但显然我也希望调用表单代码继续。现在我'我使用新的LoadingForm().Show(),然后在我的调用窗体上处理WndProc,如果IsBusy==true我将IsBusy==true所有WndProc消息...但我不喜欢这种方法。它还可以防止从重绘形成,这是我不想要的。如果我知道所有不同类型的消息都允许正确重绘,我不会介意WndProc方法,并且IsBusy==true,但我不介意。所以,我的问题是:有没有更好的解决方案?有人告诉我我应该传递什么WndProc消息吗?或者在哪里可以找到词汇表?谢谢。我用BeginInvoke结束了ShowDialog:myForm.BeginInvoke(newAction(()=>newLoadingForm().ShowDialog()));具有预期的效果,让该行之后的代码继续运行并仍然阻止与myForm的所有交互。如果你想通过绘画,允许WM_PAINT和WM_NCPAINT。你太复杂了。您所要做的就是防止对话框关闭。实施FormClosing事件(或覆盖OnFormClosing,更好)并在操作繁忙时设置e.Cancel=true。然后用户不能干扰你的过程。这一切都假设您使用工作线程来实现操作。以上是C#学习教程:ShowDialog没有阻止调用者分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
