我有一个SafeInvoke Control扩展方法,类似于Greg D在这里讨论的方法(减去IsHandleCreated检查)。
我从System.Windows.Forms.Form
以下方式调用它:
public void Show(string text) {
label.SafeInvoke(()=>label.Text = text);
this.Show();
this.Refresh();
}
有时(此调用可能来自多个线程)会导致以下错误:
System.InvalidOperationException
发生
Message
=“在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke。
Source
=“ System.Windows.Forms”
StackTrace: at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at System.Windows.Forms.Control.Invoke(Delegate method) at DriverInterface2.UI.WinForms.Dialogs.FormExtensions.SafeInvoke[T](T control, Action`1 action) in C:\code\DriverInterface2\DriverInterface2.UI.WinForms\Dialogs\FormExtensions.cs:line 16
怎么回事,如何解决?我知道这不是表单创建的问题,因为有时它一次只能工作一次,而下次又会失败,那么问题可能是什么呢?
PS。我真的对WinForms感到很糟糕,是否有人知道一系列很好的文章来解释整个模型以及如何使用它?