更改Thread中的主要类属性
本文关键字:属性 Thread 更改 | 更新日期: 2023-09-27 18:06:50
我一直在寻找答案,但我还没有找到线程/主线程和运行时创建的线程之间的通信应该是什么样子的答案。我在Java中遇到过这个问题,现在它又出现在C#中了。
比方说,我想写一个C#应用程序,它有一个带有简单文本Label的表单,我想运行一个线程来增加写在该标签中的数值。我正在用表单和线程的类创建主类。然后我在我的主类中创建线程类的新对象,并在它上启动线程
如何更改在main中定义的标签的文本?
因此,如果我理解正确,您将询问如何从另一个线程更改GUI。
这是通过一个名为SynchronizationContext的构造完成的,它本质上提供了在另一个线程上运行代码的方法。因此,在您的情况下,如果您想更改GUI线程中定义的标签的文本,您可以获取与GUI线程对应的SynchronizationContext
,并通过其他线程向其发布代码。
另一个你必须熟悉的概念是任务。Task
是一种抽象,在功能上与线程相同。两个任务可以同时运行。CCD_ 3启动一个新的CCD_。
话虽如此,下面是WPF中的一个例子:
public class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var context = SynchronizationContext.Current;
Task.Run(() => context.Post(state => Button.Content = "Hello World!"));
}
}
注意,即使我在Task.Run
中(这意味着我不在GUI线程上(,我仍然可以通过发布到窗口的SynchroniztaionContext
来在Button
上执行代码。
编辑:如果您对Task还不满意,并且希望使用Thread
,您也可以这样做:
var context = SynchronizationContext.Current;
var thread = new Thread(() => context.Post(state => Button.Content = "Hello World!"));
thread.Start();