高度响应的多线程WPF应用程序

时间:2013-04-08 12:44:40

标签: c# wpf multithreading backgroundworker

我正在使用WPF应用程序通过串行端口与16个设备进行通信。通信过程包括读写命令。设备配置大约需要2分钟。我的UI应该在配置过程中响应,它应该在读取命令执行后显示读取并在执行写入命令后显示命令状态。我使用backgroundworker来处理一个设备。一切正常。现在我需要同时运行所有16个设备。我该怎么做?由于只有一个UI线程可用,因此UI会挂起2-3个设备。请为此提出最好的建议。

1 个答案:

答案 0 :(得分: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(() => { ... }));