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);
我最近 运行 遇到了这个非常棘手的问题,我希望有人能帮助我。
我有一个程序使用 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);