【问题标题】:Invoke in Windows Forms在 Windows 窗体中调用
【发布时间】:2011-07-11 13:20:14
【问题描述】:

谁有使用 Invoke 的学习资源的链接?

我正在努力学习,但我看到的所有示例都无法适应我的目的。

【问题讨论】:

  • 这将有助于更具体地说明您的目的。
  • 抱歉,我正在编写一个通过串行连接与设备通信的程序。目前,该程序尝试运行一段代码,直到输入更改,但是该部分位于 GUI 线程上,因此程序无法响应更改。有人告诉我,因此我需要将这段代码放在另一个线程上并使用 Invoke 来访问它。希望对你有帮助,谢谢
  • 请下次更新您的问题,而不是写在评论中。

标签: .net winforms visual-c++ invoke


【解决方案1】:

你试过 MSDN Control.Invoke

我刚刚编写了一个小 WinForm 应用程序来演示 Control.Invoke。 创建表单后,在后台线程上开始一些工作。完成该工作后,更新标签中的状态。

public Form1()
{
    InitializeComponent();
    //Do some work on a new thread
    Thread backgroundThread = new Thread(BackgroundWork);
    backgroundThread.Start();
}        

private void BackgroundWork()
{
    int counter = 0;
    while (counter < 5)
    {
        counter++;
        Thread.Sleep(50);
    }

    DoWorkOnUI();
}

private void DoWorkOnUI()
{
    MethodInvoker methodInvokerDelegate = delegate() 
                { label1.Text = "Updated From UI"; };

    //This will be true if Current thread is not UI thread.
    if (this.InvokeRequired)
        this.Invoke(methodInvokerDelegate);
    else
        methodInvokerDelegate();
}

【讨论】:

  • 非常感谢,这太棒了,正是我想要的!我一直在尝试使用 Control.Invoke 但并不真正了解我在做什么。一个问题 - 我收到一个错误:“'delegate': identifier not found”谢谢!
  • @Luke 您使用的是什么版本的 .Net?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2012-08-11
  • 2020-05-15
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
相关资源
最近更新 更多