ShowDialog没有阻止来电者

Jef*_*eff 2 .net c# winforms

我有一个强大的命名集会.

之前已经问过这个问题......但只是出于不同的目的.

我有一个Form基类.当实现类在基类上设置属性时IsBusy.我想阻止与Form的所有交互(设置Enabled = false是不够的 - 我还想阻止移动,调整大小,关闭等......我不希望我的控件看起来被禁用IsBusy == true)并显示弹出窗口加载窗体(带有加载动画的透明无边框形式).

在我的加载动画表单上调用ShowDialog可以阻止调用表单上的交互...但显然我还希望调用表单代码继续执行.

现在我正在使用新的LoadingForm().Show(),然后在我的调用Form上处理WndProc,如果IsBusy == true我压制所有WndProc消息......但我不喜欢这种方法.它也可以防止表单重新绘制,这是我不想要的.

如果我知道所有不同类型的消息都允许正确重新绘制,我不会介意WndProc方法,IsBusy == true但我不这样做.

所以,我的问题是:

有更好的解决方案吗?

要么

罐头有人告诉我应该通过什么WndProc消息?或者在哪里找到词汇表?

谢谢.

Jef*_*eff 13

我结束了BeginInvoke的ShowDialog:

myForm.BeginInvoke(new Action(() => new LoadingForm().ShowDialog()));
Run Code Online (Sandbox Code Playgroud)

具有所需的效果,让该行之后的代码继续运行并仍然阻止与myForm的所有交互.

  • 你怎么关闭表格?myForm.EndInvoke({what put here}); (4认同)