鉴于使用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',但应该按原样工作。 –