我最近碰到这个相当棘手的问题,我希望有人能帮助我。C#trackbar不更新
我有一个程序,使用轨道杆来显示音量,它通过串行控制与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代码,为清晰起见。
所以我的问题是,为什么当我试图修改它的“标准法”
附加的信息之外值的TrackBar滑块不动:我已经试过捉迷藏程序,然后用它暂停视觉stuio和trackbar.Value已成功更改,唯一不起作用的是图形方面。
我已经与多个trackbars测试,并使用
trackbar1.Refresh();
试了一下没有工作的TrackBar 1和2的值的
图片以及所有5图片: Values of trackbars
没有为我工作,我得到错误“调用或begininvoke无法在控件上调用,直到窗口句柄已被创建”。我在网上看过,但我找不到与这个问题非常相符的例子。我会继续寻找答案。 – Klue
它看起来DataReceived事件在处理程序被添加之后不久被触发,并且在Window&trackbar本身被正确实例化并且为它们创建了句柄之前被触发。您可以在调用他之前检查此更改(代码中的答案已更新...) –
此外,当您的应用程序正在关闭窗口而串行端口不断提升DataReceived事件时,可能会出现该错误消息。 因此,在关闭窗口之前(在窗体的onClosing事件中),总是删除事件处理程序? –