0

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

4

1 回答 1

1

您必须为每个设备配备后台 Worker,您可以通过以下方式报告每个设备的进度:

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(() => { ... }));
于 2013-04-08T14:17:32.393 回答