2017-07-04 69 views
0

我正在讀取通過串口連接的秤上的重量。當體重改變時,秤會返回一個事件。這個事件工作的很好,但我無法改變事件處理程序中的WPF元素的值(嘗試標籤和文本框)與新的權重。事件回調後更改wpf元素

事件處理程序位於正確的窗口類中。

當我調用一個消息框來顯示重量時,一切都很好。

任何人都可以向我解釋如何在事件回調後更改wpf元素。這是我的回調函數。

public void OnWeightUpdate(string weight) { 
    if(String.IsNullOrEmpty(weight)) { 
     MessageBox.Show("Empty weight string, possible bad connection with scale"); 
    } 
    else { 
     MessageBox.Show(weight); 
     LblScaleAmount.Content = weight; 
    } 
} 
+0

嘗試做'Dispatcher.Invoke(()=> LblScaleAmount.Content =體重);' – Evk

+0

謝謝很多,這的確有訣竅。請把你的表揚作爲答案,以便我可以接受。 –

+0

在WPF中,最好的答案是簡單地使用數據綁定。很少需要調用Dispatcher.Invoke(),在這裏它肯定不太合適。有關如何執行此操作的詳細信息以及管理跨線程更新的其他方式,請參閱標記爲重複的內容。 –

回答

0

由於您從串口收到重量信息 - 您的回調很有可能在後臺運行(非UI線程)。您無法更新從後臺線程界面控件,所以你需要派遣更新操作返回到UI線程:

Dispatcher.Invoke(() => LblScaleAmount.Content = weight);