0

問題を修正する必要があり、入力が必要です。GUIを押すbutton1と、シリアル通信が開始されます。いくつかのコマンドを送信し、いくつかのデータを受信します。押すbutton1と、データが完全に転送されるまで、3〜4秒間他のスレッド(GUIスレッド以外)にいます。私が欲しいのは、ダイアログボックス、ポップアップ、またはそのようなもの (ビジーメッセージを表示する) を押すbutton1と GUI の前に表示され、このポップは、シリアル通信が行われている他のスレッドで自動的に閉じます。データ全体が転送されます。

何人かが提案しBackgroundWorkerましたが、私にははっきりしませんでした。

また、「winform を使用し、その FormBorderStyle を FixedDialog に設定します。メッセージ ボックスのように小さくし、プログレスバー コントロールをドロップします。スレッド処理の開始時に ShowDIAlog フォームを使用し、最後に Close を使用できます。簡単にするために、進行状況バーのスタイルを連続に設定できます。」

私のシナリオを考慮して、それを行うための良い説明または別の簡単な方法はありますか? 物事をシンプルに保ちたい

4

4 に答える 4

0

実行している .net のバージョンを指定していないため、両方の方法を提供します。

.net 4:

void OnButton1Click(Object sender, EventArgs e)
{

    var waitDailog = new frmWait();
    waitDialog.ShowDialog();

    var task = new Task(() = 
    {
        // Serial communitcation or whatever will take a long time here
    })
    .ContinueWith(result =>
    {
        waitDialog.Close();
    })
    .Start();
}

.net 3:

private frmWait _waitDialog;

void OnButton1Click(Object sender, EventArgs e)
{

    _waitDailog = new frmWait();
    waitDialog.ShowDialog();

    var thread = new Thread(OnThread);
    thread.Start();
}

void OnThread()
{
    // Serial communitcation or whatever will take a long time here

    _waitDailog.Close();
}

どちらの場合も、待機ダイアログは単なるフォームであり、何らかのアニメーションと待機を示すメッセージが表示されます。

Invoke()待機フォームを閉じる際にもいくつか必要になるかもしれませんが、チェックできるコンパイラが手元にありません。

于 2013-02-23T14:51:00.073 に答える
0

フォームのラベルを使用するか、いくつかのコマンドを実行した後に進行状況バーと更新進行状況バーを使用して、簡単なメッセージを設定できます。コマンドのセットがユーザーの指示によって開始された場合は、問題ありません。デバイスと通信し、デバイスのアラートに応答する必要がある場合は、C# の serialport の DataReceivedEvent が正常に機能します。コードを書くことができます。このイベントは、デバイスが日付をアプリケーションに送信するたびに発生し、バックグラウンドで動作します。

于 2013-02-23T12:50:15.233 に答える
0

ロジックは次のとおりです。

  • ユーザーがボタン1をクリックすると、何かを言っているポップアップボックスを表示します。
  • その間、データ転送コードも同じスレッドにある必要があります。
  • 次に、すべてのデータが転送される時点を取得するためのコードを記述し、その時点でそのダイアログ ボックスを非表示にします。

サンプルコードが必要な場合は、作成したコードも投稿してください。これにより、ロジックを示す実用的なアプローチのコードを提供できます。

コードを理解するか、よりよく投稿してください。

于 2013-02-23T13:00:55.463 に答える
0

BackgroundWorker は確かに最良の選択肢です。非常に詳細な HowTo がここにあります。

于 2013-02-23T13:02:01.443 に答える