1

すべてのテストが実行されるまで、複数のテストを実行するテストエンジンがあります。

各テストオブジェクトには、ExecuteandResumeメソッドがあります。これらのメソッドはステータスを返します。

  • COMポートからの応答を待っています
  • ユーザーからのボタンクリックを待っています
  • テストが完了しました。

GUIで、ユーザーはボタンをクリックしてテストエンジンを起動します。つまり、ボタンのクリックイベントは、テストエンジンのstartメソッドを呼び出します。

次に、テストはCOMポートを介してメッセージを送信する場合があり、COMポートからメッセージを受信するまで中断する必要があります。COMポート割り込みでメッセージを処理してから、テストエンジンのresumeメソッドを呼び出します。

テストには、ユーザーからの情報が必要な場合があります。この場合、テストはテキストボックスにメッセージを表示してから、戻ります。ボタンのクリックイベントハンドラーは、テストエンジンのresumeメソッドを呼び出します。

これは正常に機能しますが、COMポートを介してメッセージを繰り返し送信し、応答を受信するテストを行う必要がある場合を除きます。このループは、GUIのボタンをクリックすることによってのみ終了します。

COMポートの割り込みハンドラーがGUIとは異なるスレッドで実行されることを学びました。テストは、デリゲートを使用してGUIメソッドを実行します。

COMポートメッセージを待っている間に、テストエンジンにボタンのクリックをチェックさせるにはどうすればよいですか?テストエンジンは、メッセージシステムの同期を維持するために、COMポートメッセージを受信した後にボタンのクリックをチェックする必要があります。

注:
COMポートから受信したメッセージ用のセマフォと停止ボタン用の別のセマフォを使用して、テストエンジンをワーカースレッドで実行することを考えていました。テストエンジンは、メッセージセマフォを保留し、ウェイクアップしてメッセージを処理してから、停止ボタンのセマフォをチェックします

Windows7のVisual2010ExpressでC#を使用する。

4

1 に答える 1

1

BackgroundWorkerコンポーネントがこれを支援できるかもしれないと思います。コードを取得してバックグラウンドスレッドで実行するように設計されており、キャンセルの簡単なメソッドがあります(ボタンはCancelAsync()を呼び出し、テストエンジンはCancellationPendingプロパティをチェックしてキャンセルする必要があるかどうかを確認します)。

フォームに1つ追加します。次に、COMポートテストコードをメソッドにラップします。メソッドは、ワーカーのDoWorkイベントハンドラーに接続します。

作業を開始する場合は、runWorkerAsync()を呼び出します。COMポートをテストした後のそのワーカーコードは、CancellationPendingプロパティをチェックし、それがtrueの場合に戻る必要があります。前述したように、キャンセル用のボタンイベントハンドラーはCancelAsync()を呼び出してそのプロパティを設定します。

BackgroundWorkerは、進行状況を表示するためのイベントもサポートしていますが、使用したくない場合は、それをフックする必要はありません。

于 2011-01-20T18:39:37.690 に答える