鑑於使用2種表單時是否需要兩次單獨的InvokeRequired檢查?
Action closeLoadingAction = new Action(() =>
{
loadingForm.Close();
#region - may need to put into second Action
panelOnMainForm.Controls.AddRange(physdocControls.ToList<Control>().ToArray());
if (Handle != IntPtr.Zero)
User32DLL.SetForegroundWindow(this.Handle);//Handle is a property of the mainForm.
#endregion
});
有時我得到把手不創建的異常,即使我檢查所需的調用。
if(loadingForm.InvokeRequired)
loadingForm.Invoke(closeLoadingAction);
else
closeLoadingAction();
加載表單與主窗體在相同的線程上運行。您在上面看到的代碼運行在單獨的線程中。我懷疑我需要另一個檢查來調用主窗體。我需要再次檢查還是我已經安全?
'Handle'從哪裏來,這是在控制中運行嗎?控件是否已創建(有句柄可用)?還有一種方便的擴展方法可以減少表單控件上的InvokeRequired檢查冗餘,但這是一個不同的故事。 –
@QuintinRobinson - 已更新的問題。詳細的事情會很好......我在我的代碼中使用了很多次。 –
WRT的擴展方法:看看這個答案http://stackoverflow.com/a/12179408/12707如果你是如此的傾向,你可以改變簽名爲'Action'而不是'MethodInvoker',但應該按原樣工作。 –