我试图从辅助线程隐藏在主线程上创建的表单,但是当我调用 hide 方法时,我显然遇到了跨线程问题。我是新手,并不知道如何纠正这个问题。如果它正在更改在主线程上创建的内容,我总是只创建一个委托(delegate)来调用我的方法,但我不知道如何在此处为内置隐藏方法执行此操作。如果您需要更多信息,请告诉我。
代码:
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)); // **** //
当我调试它时,它看起来并没有执行任何操作。它似乎只是传递命令。同样,我是新手,所以欢迎任何解释。
最佳答案
没有理由检查 InvokeRequired
或创建匿名方法。简单的写
mainForm.Invoke(new MethodInvoker(mainForm.Hide));
关于c# - 跨线程隐藏方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375185/