我有一个System.Windows.Forms.Form
窗口,需要使用Control.Invoke()
将事件传递给它。但是,在表单上调用Show()
之前,不会传递消息。
为了解决这个问题,我在表单的构造函数中尝试了这个kludge:
this.Show();
this.Hide();
这样可行,消息现在正在传递。但是,这会导致窗体在构造窗体时闪烁。是否有更优雅的方式来实现我想要的目标?
我正在使用.NET 2.0(不允许使用更新的版本)。
答案 0 :(得分:2)
Control.Invoke
的标准是必须创建Handle
而不是其他内容。您无需致电Show
和Hide
而是强制创建Handle
。
Form yourForm = new Form();
var handle = pbForm.Handle;//Force create handle
从这时起,您可以致电yourForm.Invoke
注意:除非您显示表单,否则不会触发您的表单的Load
事件和Shown
事件。所以任何代码都取决于那些事件会破裂。
如果您的代码取决于Load
或Shown
个事件,则需要进行黑客攻击。您需要使表单非常小,以便用户无法注意到它(可能大小为1,1),然后调用Show
和Hide
。稍后,当您需要向用户显示表单时,您可以设置一个不错的Size
。