0
我正在WPF應用程序通過串行端口與16個設備進行通信。通信過程包括讀取和寫入命令。設備的配置大約需要2分鐘。我的UI在配置過程中應該是有響應的,它應該在讀命令執行後顯示讀數,並且在寫命令執行後顯示命令狀態。我使用backgroundworker來處理一個設備。一切正常。現在我需要同時運行所有16個設備。我該怎麼做?由於只有一個UI線程可用,UI會掛起2-3個設備。請爲此建議最佳方法。高響應多線程WPF應用程序
我正在WPF應用程序通過串行端口與16個設備進行通信。通信過程包括讀取和寫入命令。設備的配置大約需要2分鐘。我的UI在配置過程中應該是有響應的,它應該在讀命令執行後顯示讀數,並且在寫命令執行後顯示命令狀態。我使用backgroundworker來處理一個設備。一切正常。現在我需要同時運行所有16個設備。我該怎麼做?由於只有一個UI線程可用,UI會掛起2-3個設備。請爲此建議最佳方法。高響應多線程WPF應用程序
你必須有後臺工作的每個設備, 您可以通過報告進度爲每個設備:
backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.ProgressChanged +=backgroundWorker1_ProgressChanged;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
....
backgroundWorker1.ReportProgress(i);
....
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
你也可以從任何線程UI線程通過互動:
Application.Current.Dispatcher.BeginInvoke
(DispatcherPriority.Normal,new Action(() => { ... }));
「由於只有UI線程可用」 - 你是什麼意思?爲什麼不爲所有16個設備使用'BackgroundWorkers'? – mbeckish 2013-04-08 12:47:17
對不起。我的意思是說只有一個UI線程。所有設備都有相同的操作。所以我創建了用戶控件,並在一個窗口中加載16個用戶控件,並在後臺工作器中執行完整的設備通信。但在通信過程中,我還需要更新UI。哪個被吊死。 – Siddharood 2013-04-08 12:54:06
你如何溝通? – Paparazzi 2013-04-08 13:02:09