c# - 跨线程隐藏方法

标签 c# multithreading

我试图从辅助线程隐藏在主线程上创建的表单,但是当我调用 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/

相关文章:

c - 如何在单个CPU的多个CPU核心而不是多个CPU上设置亲和性?

c# - 将 List<object> 转换为 AnonymousTypes 列表

c# - ReaderWriterLockSlim.EnterUpgradeableReadLock() 本质上与 Monitor.Enter() 相同吗?

c# - 从 C# 访问 COM 对象的最佳方式

c# - 升级到 .NET 4.0 后,Debugger.Launch() 现在使我的 Windows 服务崩溃

ruby-on-rails - 如何在增加预先加载的同时解决此错误? "ERROR ThreadError: Attempt to unlock a mutex which is locked by another thread"

java同步访问不同的临界区

java - 服务器不读取客户端消息

c# - InvalidProgramException/Common Language Runtime 检测到无效程序

c# - 一种使用 RegEx 在字符串中查找一组文件名路径的方法