我最近碰到這個相當棘手的問題,我希望有人能幫助我。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事件中),總是刪除事件處理程序? –