我有一個類似于Greg D討論的SafeInvoke Control擴展方法(減去IsHandleCreated檢查)。我從System.Windows.Forms.Form以下地址調用它:public void Show(string text) { label.SafeInvoke(()=>label.Text = text); this.Show(); this.Refresh();}有時(此調用可能來自各種線程),這會導致以下錯誤:System.InvalidOperationException 發(fā)生了Message=“在創(chuàng)建窗口句柄之前,無法在控件上調用Invoke或BeginInvoke?!盨ource=“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發(fā)生了什么,我該如何解決?我知道這不是形式創(chuàng)建的問題,因為有時它會工作一次并且下次失敗,那么問題是什么呢?PS。我真的很擅長WinForms,有沒有人知道一系列很好的文章解釋整個模型以及如何使用它?
3 回答

Qyouu
TA貢獻1786條經驗 獲得超11個贊
我發(fā)現(xiàn)InvokeRequired不可靠,所以我只是使用
if (!this.IsHandleCreated)
{
this.CreateHandle();
}
- 3 回答
- 0 關注
- 3186 瀏覽
添加回答
舉報
0/150
提交
取消