Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从位于不同类中的另一个线程更新标签文本?_C#_Multithreading_User Interface - Fatal编程技术网

C# 如何从位于不同类中的另一个线程更新标签文本?

C# 如何从位于不同类中的另一个线程更新标签文本?,c#,multithreading,user-interface,C#,Multithreading,User Interface,我是C语言的新手,我一直很难弄清楚如何准确地更新C语言中标签的文本属性 为了澄清,我有一个标签,它显然位于主线程中,可以在名为myClass的类中找到 另一方面,工作线程方法位于名为workerClass的类中。显然,这两个类都在同一个名称空间中。以下是示例代码: GUI类: namespace testApplication { public partial class testApplication : Form { ///Code here

我是C语言的新手,我一直很难弄清楚如何准确地更新C语言中标签的文本属性

为了澄清,我有一个标签,它显然位于主线程中,可以在名为myClass的类中找到

另一方面,工作线程方法位于名为workerClass的类中。显然,这两个类都在同一个名称空间中。以下是示例代码:

GUI类:

namespace testApplication
{
    public partial class testApplication : Form
    {

         ///Code here

         public void changeLabelText(String text) 
         {
             label1.Text = text;
         }
    }
 }
当然,有一种方法可以启动一个线程,这一部分工作得很好

worker类代码看起来与上面的代码非常相似,它不是自然地从Form类继承的。一切正常,只是我不知道如何从工作线程/类更新GUI。我浏览了一些MSDN教程,但没有发现它们非常有用,主要是因为它们的所有方法都存在于一个类中

我尝试创建testApplication类的一个新实例,上面的GUI显示在工作线程本身中,尽管这一点一开始就没有意义,然后调用changeLabelText方法,该方法一度也包含.Invoke方法,但尽管没有引发异常,但仍然无效


因此,简单来说:如何从位于不同类中的不同线程更新GUI元素?

workerClass需要知道testApplication类的具体实例。
或者,您可以在更高的范围内管理这两个方面。

您使用的是WPF还是WinForms。如果是WPF,我可以分享一些示例代码。基本上,您需要在GUI线程上触发一个事件。这正是Invoke所做的;它向控件发送一条引用委托的消息,GUI线程而不是当前线程调用该委托作为处理该消息的一部分。您能否澄清这一点?我该怎么做?这需要一些关于如何创建workerClass实例以及如何创建IsInstance of testApplication的代码?i、 可能是程序的主要方法。