[英]C# trackbar not updating
我最近遇到了这个相当棘手的问题,我希望有人可以帮助我。
我有一个程序,使用轨迹栏显示音量,它由Arduino串口控制。
当我尝试在任何方法中修改trackar的值(programmaticaly)(移动滑块)时,它与以下代码完美配合:
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”所在的位置。 因此,为了清晰起见,我删除了其余的(我希望的)unessecary代码。
所以我的问题是为什么当我尝试在“标准方法”之外修改它的值时,轨迹栏滑块不会移动
其他信息:我试过运行程序,然后将它与视觉stuio和trackbar暂停.Value已成功更改,唯一不起作用的是图形方面。
我已经测试了多个轨道栏,并尝试使用
trackbar1.Refresh();
它不起作用
轨迹栏1和2的值的图片以及所有5的图片: 轨迹栏的值
SerialPort的DataReceived事件是在一个不能更改UI元素的secundary线程(而不是UI线程)上引发的。 使用“调用”,您可以在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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.