dotnet で TcpClient を使用して通信する単純なクライアントを作成しました。サーバーからのデータメッセージを待つために、ソケットでRead()
ブロッキング呼び出しを使用するスレッドを使用します。Read()
何かを受け取ると、さまざまなイベントを生成する必要があります。これらのイベントはワーカー スレッドで発生するため、そこから直接 UI を更新することはできません。Invoke()
使用できますが、UI をまったく使用しないユーザーやプレゼンテーション フレームワークを使用するユーザーが SDK を使用するため、最終開発者にとっては困難です。プレゼンテーション フレームワークでは、これを処理する方法が異なります。Invoke()
現時点では、Microstation Addin としてのテスト アプリでは多くの時間がかかります。Microstation はシングル スレッド アプリケーションであり、そのスレッドでの call invoke は、常に描画を行うのに忙しく、他のメッセージの処理に時間がかかりすぎるため、適切ではありません。
Dispatcher
ユーザーがまたはを通過する必要がないように、UI と同じスレッドでイベントを生成したいInvoke
。
データが到着したときにソケットから通知を受ける方法を知りたいですか? そのためのコールバックが組み込まれていますか。別の読み取りスレッドを使用せずに winsock スタイルの受信イベントが好きです。また、データのポーリングにウィンドウタイマーを使用したくありません。
ヘルプが言う関数にIOControlCode.AsyncIO
フラグが見つかりましたIOControl()
データの受信待ちの通知を有効にします。この値は、Winsock 2
FIOASYNC
定数と同じです。
それを使用して通知を受け取る方法の例は見つかりませんでした。私が MFC/Winsock にいる場合size(0,0)
は、データ受信イベントまたは他のソケット イベントをリッスンするために使用されたウィンドウを作成する必要があります。しかし、ドットネット アプリケーションでそれを行う方法がわかりません。