2011-08-06 14 views
1

私はDelphiでのコード作成に慣れていましたが、非同期操作(例:読み込み)が実行された後、メッセージがアプリケーションのメッセージループにポストされ、アプリケーションメッセージループをポンピングするだけで、 "読み上げ済みの"通知を受け取りました。.NET:コールバックがGUIスレッド上で実行される非同期ソケット?

このメリットは、コールバックが「読み込み」コールを行ったスレッドと同じスレッドで実行されていたことです。これは、悪夢のようなスレッドを避けていました(たとえば、データ競争、コントロールに触れる前にGUIスレッドにマーシャル、等。)。

.NETでこれを行うことは可能ですか?私は全面的に調査し、これを理解することはできません。

答えて

2

ネットワークスタックとUIスタックは緊密に結合されていません。しかし、あなたの非同期コールバックで、あなたはリサイズでUIスレッドに(メッセージループを介して)スイッチバック

someControl.Invoke(workToDo, args); 

を使用することができ、またはWPFでDispatcher.Invoke。

+0

いいえ。私はこれが純粋なWin32で可能かどうか疑問に思いますか?以前私が使用していたDelphiコンポーネントは単にWin32のラッパーであり、Win32自体は非同期操作が完了した後にWin32メッセージキューにメッセージを投稿したものだと仮定していたからです。 – Tom

関連する問題