2013-04-08 69 views
0

我正在WPF應用程序通過串行端口與16個設備進行通信。通信過程包括讀取和寫入命令。設備的配置大約需要2分鐘。我的UI在配置過程中應該是有響應的,它應該在讀命令執行後顯示讀數,並且在寫命令執行後顯示命令狀態。我使用backgroundworker來處理一個設備。一切正常。現在我需要同時運行所有16個設備。我該怎麼做?由於只有一個UI線程可用,UI會掛起2-3個設備。請爲此建議最佳方法。高響應多線程WPF應用程序

+3

「由於只有UI線程可用」 - 你是什麼意思?爲什麼不爲所有16個設備使用'BackgroundWorkers'? – mbeckish 2013-04-08 12:47:17

+0

對不起。我的意思是說只有一個UI線程。所有設備都有相同的操作。所以我創建了用戶控件,並在一個窗口中加載16個用戶控件,並在後臺工作器中執行完整的設備通信。但在通信過程中,我還需要更新UI。哪個被吊死。 – Siddharood 2013-04-08 12:54:06

+0

你如何溝通? – Paparazzi 2013-04-08 13:02:09

回答

1

你必須有後臺工作的每個設備, 您可以通過報告進度爲每個設備:

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(() => { ... }));