如果我使用我的C#表单(WinForms)并使其不可见:
MyForm.Visible = false;
然后在我创建的单独的线程中;执行以下代码:
this.Invoke(new MethodInvoker(delegate()
{
ProgressBar2.Visible = false;
}));
我的申请会冻结而不会继续。如果MyForm可见,则线程中的上述代码运行正常。如果它不可见,代码会在读取" this.Invoke时立即停止运行(新的MethodInvoker(委托()"行。它没有错误,它只是坐在那里(我设置了一个)断点观看它,它只是坐在那里" this.Invoke(新的MethodInvoker(委托()")。
知道为什么在我的表单被隐藏时不会执行此操作?我怎么能解决这个问题呢?我正在使用" this.Invoke(新的MethodInvoker(delegate()"因为我需要能够将MainForm上的Progress Bar控件设置为可见(并且我必须在另一个线程上执行此操作而不是main无论表单是否可见,我都希望这样做。
答案 0 :(得分:1)
当隐藏表单时,我相信消息泵不再运行。我知道Invoke机制需要消息泵运行。
您可以通过将不透明度设置为0而不是可见性来解决此问题,因为这有其自身的问题。
答案 1 :(得分:-1)
将表单包装在元素中并设置其样式=" display:none;"。将visible设置为false会导致对象不在客户端代码中呈现。