1

以前にこの質問をしましたが、はっきりしなかったので、また投稿します。私はGUIを持っています。「button1」を押すと、GUIがシリアル通信を開始します。いくつかのコマンドを送信し、いくつかのデータを受信します。「button1」を押すと、データが完全に転送されるまで、他のスレッド(GUIスレッド以外)に3,4秒間移動します。私が欲しいのは、ボタン1を押すと、ダイアログボックス、ポップアップなど(ビジーメッセージを表示)がGUIの前に表示され、このポップは、シリアル通信が行われている他のスレッドで自動的に閉じます。データ全体が転送されます。

バックグラウンドワーカーを提案する人もいましたが、はっきりしませんでした。

私のシナリオを考慮して、良い説明またはそれを行う方法はありますか?

ありがとう

4

1 に答える 1

0

私は次のコードでそれを行います:

  public partial class frmWait : Form
{
    private BackgroundWorker worker;

    public frmWait()
    {
        InitializeComponent();
        this.worker = new BackgroundWorker
            {
                WorkerReportsProgress = true
            };
        this.worker.RunWorkerCompleted += WorkerOnRunWorkerCompleted;
        this.worker.DoWork += WorkerOnDoWork;
        this.worker.ProgressChanged += WorkerOnProgressChanged;
        this.worker.RunWorkerAsync();
    }

    private void WorkerOnProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        // Update UI or something else
    }


    private void WorkerOnDoWork(object sender, DoWorkEventArgs e)
    {
        // Do background-stuff here
    }

    private void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        // Actions after BackgroundWorker is done
        Close();
    }
}

button1 を含むフォームでは、ボタンのクリックイベントで次のことを行う必要があります。

frmWait wait = new frmWait();
wait.ShowDialog();
于 2013-02-22T08:52:18.327 に答える