c# - 如何在扩展/方法文件中使用 Invoke 方法?

标签 c# .net multithreading invoke invokerequired

好吧,我正在编写一个对字符串、标签、链接标签、类等有用的扩展/方法文件。

但是,我有一个问题。我有一个更改标签文本的 showMessage() 方法,效果很好。但我决定使用线程执行来做到这一点,然后我这样做:

namespace LabelExtensions
{
    public static class LabelExtensionsClass
    {        
        private delegate void UpdateState();

        public static void ShowMessage(this Label label, string text)
        {
            if (label.InvokeRequired)
            {
                label.Invoke((UpdateState)delegate
                {
                    label.Text = text;
                });
            }
            else
            {
                  label.Text = text;
            }
        }
}
}

抱歉,打错了。我在论坛上输入了这段代码。 错误继续。

根据documentation ,要使用 Invoke 方法需要导入:

命名空间:System.Windows.Forms

程序集:System.Windows.Forms(在 System.Windows.Forms.dll 中)

然后我做了:

using System.Windows.Forms;

但这会返回同样的错误:

The name 'Invoke' does not exist in the current context

我该如何解决这个问题?

提前致谢。

最佳答案

为什么不这样做:

label.BeginInvoke( (Action) (() => label.Text = text));

无需创建自己的委托(delegate)。只需使用内置的 Action代表。您可能应该为基础 Control 创建扩展方法类而不是标签类。它将更易于重用。

关于c# - 如何在扩展/方法文件中使用 Invoke 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537257/

相关文章:

c# - Windows IOT Core 自更新应用程序

c# - 当我模拟我的 ASP.NET MVC Controller 时,我的 ActionMethod 不返回任何 View 。为什么?

c++ - 如何在C/C++中实现确定性多线程?

c# - 是否有任何用于 ESC/POS 命令的虚拟打印机驱动程序可以在编程时进行测试?

C# Winforms Keys.Right 显示等于单引号?

c# - MethodInfo可以用作字典键吗?

c# - 下拉大小设置未采用

java - 将数据批量加载到数据库中

c++ - 将多个参数传递给 _beginThreadEx

c# - OData V4 无法正确序列化包含 System.Object 属性的 POCO(?)s 列表