3

如果我采用 C# 表单 (WinForms) 并使其不可见:

MyForm.Visible = false;

然后在我创建的单独线程中;以下代码执行:

        this.Invoke(new MethodInvoker(delegate()
                                          {
                                              ProgressBar2.Visible = false;
                                          }));

我的应用程序将冻结而不会继续。如果 MyForm 可见,则线程中的上述代码运行良好。如果它不可见,则代码在读取“this.Invoke(new MethodInvoker(delegate()”)行后立即停止运行。它不会出错,它只是坐在那里(我设置了一个断点来观察就在“this.Invoke(new MethodInvoker(delegate()”)之后坐在那里。

关于为什么当我的表单被隐藏时它不会执行的任何想法?以及如何解决这个问题?我正在使用“this.Invoke(new MethodInvoker(delegate()”),因为我需要能够将 MainForm 上的进度条控件设置为可见(并且我必须在主 UI 线程之外的另一个线程上执行此操作)并且我想要无论表单是否可见,都要这样做。

4

2 回答 2

2

当表单被隐藏时,我相信消息泵不再运行。我知道 Invoke 机制需要消息泵运行。

您可以通过将不透明度设置为 0 而不是可见性来解决此问题,但这有其自身的问题。

于 2012-09-18T01:00:56.610 回答
-1

将您的表单包装在一个元素中并设置其样式=“显示:无;”。将 visible 设置为 false 会导致对象不在客户端代码中呈现。

于 2012-09-18T01:08:30.867 回答