C# 轨迹栏不更新

C# trackbar not updating

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

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

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

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" 所在的位置。因此,为了清楚起见,我删除了其余的(我希望)不必要的代码。

所以我的问题是为什么当我尝试修改 "standards method"

之外的值时 Trackbar 滑块不移动

附加信息:我试过 运行nning 程序然后用 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));
}

我发现了问题,当我声明我的串行通信时我正在使用`

   Form1 form1 = new Mixer.Form1();
   initialiseSerialEventHandler(arduinoCOM);

而我应该只使用

       initialiseSerialEventHandler(arduinoCOM);