私のアプリケーション(winform)は、シリアルポート上のデバイスにアクセスする必要があります。すべての通信はdllに入れられ、すべてのシリアルポート通信を処理し、シリアルデバイスの応答をメインアプリケーションに返す必要があります。dllの応答が受信したデータを続行するのをメインアプリケーションが待機するようにするにはどうすればよいですか?
3 に答える
その dll によって公開される API に依存します。それらが同期 API を提供する場合、一時停止はまったく必要ありません。スレッドは dll コードに入り、コードに戻ると結果が表示されます。
ただし、API が非同期の場合は、ポーリング メソッドまたはコールバックのいずれかが必要です。
とにかく、APIのコードを提供していただければ、より関連性の高い回答を提供できます。
問題の dll コードが非同期の場合は、スレッド結合がうまくいく可能性があります。シリアルポートの読み取りに使用されている基になるスレッドにアクセスできる方法はありますか?
API が同期の場合は、別のスレッドで API を呼び出します。そのスレッドを開始するときは、UI で関連するすべてのコントロールを無効にし (またはフォーム全体を無効にしますが、通常はユーザー エクスペリエンスが良くありません)、何らかの通知 (ステータス バーのテキストなど) を提供します。API が戻ったら、スレッドが完了したことを UI に通知し、コントロールを再度有効にして、ユーザーに何らかの通知を提供します。
API が非同期の場合は、コントロールを無効にし、ステータスを提供して、API を呼び出します。API が完了 (または失敗) したことを通知したら、コントロールを再度有効にしてステータスを提供します。