在不调用show()的情况下启动表单的消息循环

时间:2014-08-29 12:24:34

标签: c# .net winforms .net-2.0

我有一个System.Windows.Forms.Form窗口,需要使用Control.Invoke()将事件传递给它。但是,在表单上调用Show()之前,不会传递消息。

为了解决这个问题,我在表单的构造函数中尝试了这个kludge:

this.Show();
this.Hide();

这样可行,消息现在正在传递。但是,这会导致窗体在构造窗体时闪烁。是否有更优雅的方式来实现我想要的目标?

我正在使用.NET 2.0(不允许使用更新的版本)。

1 个答案:

答案 0 :(得分:2)

Control.Invoke的标准是必须创建Handle而不是其他内容。您无需致电ShowHide而是强制创建Handle

Form yourForm = new Form();
var handle =  pbForm.Handle;//Force create handle

从这时起,您可以致电yourForm.Invoke

注意:除非您显示表单,否则不会触发您的表单的Load事件和Shown事件。所以任何代码都取决于那些事件会破裂。

如果您的代码取决于LoadShown个事件,则需要进行黑客攻击。您需要使表单非常小,以便用户无法注意到它(可能大小为1,1),然后调用ShowHide。稍后,当您需要向用户显示表单时,您可以设置一个不错的Size