C# 获取跨线程操作在MDIParent中无效

C# 获取跨线程操作在MDIParent中无效,c#,.net,multithreading,exception-handling,mdi,C#,.net,Multithreading,Exception Handling,Mdi,可能重复: 我试图从另一个线程关闭窗体的底部。我得到以下错误 System.InvalidOperationException:跨线程操作无效:从创建控件的线程以外的线程访问控件“MDIParent” 对于以下行: MDIParent.MDIParentRef.BaseClose(); 您需要在UI线程上执行以下操作: if (InvokeRequired) Invoke(new Action(MDIParent.MDIParentRef.BaseClose)); else

可能重复:

我试图从另一个线程关闭窗体的底部。我得到以下错误

System.InvalidOperationException:跨线程操作无效:从创建控件的线程以外的线程访问控件“MDIParent”

对于以下行:

MDIParent.MDIParentRef.BaseClose();

您需要在UI线程上执行以下操作:

if (InvokeRequired) 
    Invoke(new Action(MDIParent.MDIParentRef.BaseClose));
else
    MDIParent.MDIParentRef.BaseClose();

@Mehrdad,我试着用上面的方法。am获取错误:无法将lambada表达式转换为类型“system.delegate”,因为它不是委托类型。@Mehrdad,if(InvokeRequired)的值始终为false。正因为如此,else条件正在执行,同样的错误再次出现。如果您确定是从另一个线程调用它,请用
Invoke(…)
行替换整个内容。@Mehrdad,我使用BaseClose()的原因是。。我正在使用shellLib并创建一个自定义桌面任务栏。当我尝试使用BaseClose()关闭任务栏时,它会完美地关闭任务栏。但问题是任务栏占用的空间被阻塞了,并且没有释放。问题是什么。给我这个建议。那是另一个问题。我不知道你该怎么办。将其作为单独的问题发布。有人会回答的。到目前为止,你已经陈述了事实。它们似乎是完全合理和明智的事实。你有问题吗?