gpt4 book ai didi

C# 轨迹栏不更新

转载 作者:行者123 更新时间:2023-11-30 14:47:19 25 4
gpt4 key购买 nike

我最近遇到了这个非常棘手的问题,我希望有人能帮助我。

我有一个程序使用 trackbars 来显示音量,它由 Arduino 通过串口控制。

当我尝试以任何方法修改 trackar 的值(以编程方式)(移动 slider )时,它与以下代码完美配合:

trackbar1.Value = ...;

但是,当我将其放入我的串行数据处理程序时,它不起作用:/

我这样声明串行数据处理程序:

//declaring arduinoCom
public SerialPort arduinoCOM;

//In form1
arduinoCOM.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

我的处理程序看起来像这样:

public void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
trackBar2.Value = 50;

}

串行通信完美无缺,处理程序可以正常工作。

我已经尝试了 2 天,我能够确定工作轨迹栏和不工作轨迹栏之间的唯一区别是“trackbar1.value”所在的位置。因此,为了清楚起见,我删除了其余的(我希望)不必要的代码。

所以我的问题是,当我尝试在“标准方法”之外修改它的值时,为什么 Trackbar slider 不移动

附加信息:我试过运行程序,然后用 visual stuio 和 trackbar 暂停它。Value 已成功更改,唯一不起作用的是图形方面。

我测试过多个轨迹条,并尝试使用

trackbar1.Refresh();

没用

trackbar 1 和 2 的值的图片以及所有 5 的图片: Values of trackbars

trackbars not moving

最佳答案

SerialPort 的 DataReceived 事件是在您无法更改 UI 元素的辅助线程(不是 UI 线程)上引发的。使用“Invoke”,您可以在 UI 线程中进行更改而不是

public void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
trackBar2.Value = 50;

}

使用:

public void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
if (trackbBar2.IsHandlecreated) trackBar2.Invoke(new Action(() => trackbar.Value = 50));
}

关于C# 轨迹栏不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573308/

25 4 0