如果你在新线程中直接使用MessageBox.Show那么程序会死,因为MessageBox是UI的一部分,没有Invoke的情况下不能跨线程调用
如果你在MessageBox.Show的时候已经是Invoke了,那么InvokeRequired自然是false,因为Invoke就是将一部分逻辑从子线程提升到UI主线程去运行
Code
private delegate void ExecuteHandler();
public void CloseWaitForm()
{
if (InvokeRequired)
Invoke(new ExecuteHandler(Close));
else
Close();
}
希望有所帮助。
MSDN上就解释很详细
你可以每一部都MessageBox.Show(InvokeRequired.ToString());输出一下,看看是哪里出了问题,你的代码可能是一部分,我没有看的很明白。另外你再参照一下MSDN,看看有没有出现他的的那种情况