- - PR -
非同期クライアントでの受信処理について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-07-04 03:37
現在MSDNの”.NET Framework 開発者ガイド 非同期クライアント ソケットの例”を参考にWindowsアプリのクライアントを作成中です。
ここでの受信処理を採用した場合、受信処理が完了する前にreceiveDone.WaitOne()が呼び出されてしまうためUIがフリーズした状態になってしまいます。 何か解決策があるのでしょうか? アドバイスのほどよろしくお願いします。 |
|
投稿日時: 2008-07-04 13:24
ずばり言いますと「WaitOne()を呼び出さなければ良い」ですね。
WaitOne()はシグナルを受信するまで待機(現在のスレッドをブロック)します。 http://msdn.microsoft.com/ja-jp/library/58195swd(VS.80).aspx ですので、UIがフリーズしてしまうのは至極当然の事です。 非同期受信を行っているわけですから、受信完了時には 指定のコールバック関数(BeginReceiveに渡しているデリゲート)が呼び出されます。 つまり受信完了時の処理はコールバック関数内で行えば良いですよね。 MSDNのサンプルはあくまで「サンプル」です。(そのままでは実用にはむいてない) サンプルが為、WaitOneを呼び出している感じです。 (でないとプロセスが終了してしまい、受信完了前にプロセス終了するかもしれませんので) サンプルをそのままコピペするのではなく、サンプルを参考にしながら 1行1行理解し、希望する動作をするコードを記述した方が良いと思います。 あとはマルチスレッドについて調べてみるのも良いですね。 |
|
投稿日時: 2008-07-05 18:54
くまっちさん返信ありがとうございます。
今後は、一行一行考えながら書いて見ます。あと、マルチスレッドについても調べてみようと思います。 また、質問することがあるかもしれませんが、またお願いします。 |
1