用户控件创建和隐藏表单线程问题

时间:2010-05-19 10:21:45

标签: c# winforms multithreading

我有一个名为ChatController的控件,作为我的私人成员:

private frmChat m_chatWindow = null;

在ChatController的构造函数中我做:

m_chatWindow = new frmChat(strJobNumber, m_emailAddress);   

if (m_chatWindow.InvokeRequired)
    m_chatWindow.Invoke(new MethodInvoker(delegate { m_chatWindow.Hide(); }));
else
    m_chatWindow.Hide();

但无论我做什么,我都无法隐藏m_chatWindow,它会随机认为InvokeRequired为true或false,并且会抛出一个错误,说“跨线程等等等等。”。

这已经存在,我唯一改变的是m_chatWindow.Show(this)m_chatWindow.Hide()

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

调用表单的构造函数后,它将不会显示。所以没有必要隐藏它。

如果您不想在创作后立即显示它,只需扔掉整个if-else部分。然后在您的代码中,您希望显示m_chatWindow,只需使用已知的Show()函数调用它。