我试图从辅助线程隐藏在主线程上创建的表单,但是当我调用 hide 方法时,我显然遇到了跨线程问题。我是新手,对于如何纠正这个问题真的不知道。我总是创建一个委托来调用我的方法,如果它正在更改在主线程上创建的东西,但我不知道如何在这里为内置的 hide 方法执行此操作。如果您需要更多信息,请与我们联系。
代码:
public partial class MainForm : Form
{
ControlPanelForm m_controlPanel = new ControlPanelForm();
// ....
void MeterThread()
{
while (true)
{
// ....
if (EMOdetected)
{
m_controlPanel.Deinitialize();
m_controlPanel.Hide(); // **** //
}
}
}
}
基本上,我的 MainForm 会调出一个控制面板表单来完成一些工作。在后台我有一个线程正在运行并检查东西,其中一个是紧急关闭,此时我想关闭我的控制面板然后隐藏它。
如果我尝试在那里调用它,
m_controlPanel.Invoke(new EMOHandler(m_controlPanel.Hide)); // **** //
当我调试它时,它看起来不像执行任何东西。它似乎只是传递了命令。再说一次,我是新手,所以欢迎任何和所有的解释。