我得到下面的异常在Windows窗体应用程序何时注册将调用Form.Invoke到事件的方法?
System.InvalidOperationException:调用或BeginInvoke可直到窗口句柄已创建不能在一个控件调用。
发生异常的方法调用this.Invoke(System.Windows.Forms.Form.Invoke)。此方法在构造函数中注册到另一个类的事件,这似乎会导致竞争条件和此异常。
public Form1()
{
InitializeComponent();
SomeOtherClass.Instance.MyEvent += new SomeDelegate(MyMethod);
}
private void MyMethod()
{
this.Invoke((MethodInvoker)delegate
{
// ... some code ...
}
}
表单生命周期的哪个阶段是Handle创建的?在哪种形式的事件中,将该方法注册到外国事件中是否安全?
它看起来像你不是在你的构造函数调用的InitializeComponent()。 – bitxwise 2011-04-12 10:32:09
有** HandleCreated **事件表单,您可能会检查, – V4Vendetta 2011-04-12 10:51:55
@bitxwise,我在构造函数中首先调用InitializeComponent,我只是将它从代码示例中简单地删除...我将再次添加它。 – Hinek 2011-04-12 11:38:24