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