gpt4 book ai didi

c# - 如何在线程之间传递值?

转载 作者:行者123 更新时间:2023-12-03 19:30:17 25 4
gpt4 key购买 nike

我有一个 Windows 窗体程序,其中包含一个 MainForm 窗体。按下按钮后,我启动一个代码,该代码每 0.5 秒在另一个线程上运行(脉冲)一次。我想通过 Pulse 方法修改许多内容,例如 MainForm 上的标签、进度条。这怎么可能?所以我想知道如何与该线程和 MainForm 中的变量、值进行交互。互相修改等等.

点击 foo 按钮后,我告诉我的脉动器启动。Pulsator.Initialize();

这是 Pulsator 类:

public static class Pulsator
{
private static Thread _worker;

public static void Initialize()
{
_worker = new Thread(Pulse);
_worker.IsBackground = true;
_worker.Start();
}

public static void Close()
{
if (_worker != null)
{
_worker.Abort();
while (_worker.IsAlive || _worker.ThreadState != ThreadState.Stopped)
{
//closing
}
}
}

public static void Pulse()
{
if (_worker != null)
{
while (true)
{
SomeOtherClass.Pulse();
Thread.Sleep(500);
}
}
else
{
SomeOtherClass.Pulse(); // yeah I know this doesnt needed
}
}
}

SomeOtherClass Pulse 方法如下所示:

    public static void Pulse()
{
//here I will have several values, variables, and I want to show results,
// values on my MainForm, like:
Random random = new Random();
MainForm.label1.Text = random.Next(123,321).ToString(); // I hope you know what I mean
}

当然这很复杂,这只是一个愚蠢的例子。

最佳答案

通常,在 WinForms 中,在拥有控件的底层非托管资源(窗口句柄)的线程外部修改可视控件的状态是不安全的。您必须使用 Control.Invoke方法来安排在控件所属线程上执行修改。

关于c# - 如何在线程之间传递值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com