0

シリアルポートを介して16台のデバイスと通信するためのWPFアプリケーションに取り組んでいます。通信プロセスには、読み取りコマンドと書き込みコマンドが含まれます。デバイスの構成には約 2 分かかります。UI は構成プロセス中に応答する必要があり、読み取りコマンドの実行後に読み取りを表示し、書き込みコマンドの実行後にコマンドのステータスを表示する必要があります。1 つのデバイスを処理するために backgroundworker を使用しました。すべて正常に動作します。ここで、16 台のデバイスすべてを同時に実行する必要があります。どうすればいいのですか?利用できる UI スレッドは 1 つだけなので、UI は 2 ~ 3 台のデバイスでハングします。これに最適な方法を提案してください。

4

1 に答える 1

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