- PR -

非同期クライアントでの受信処理について

1
投稿者投稿内容
akcy
会議室デビュー日: 2008/07/04
投稿数: 5
投稿日時: 2008-07-04 03:37
現在MSDNの”.NET Framework 開発者ガイド 非同期クライアント ソケットの例”を参考にWindowsアプリのクライアントを作成中です。

ここでの受信処理を採用した場合、受信処理が完了する前にreceiveDone.WaitOne()が呼び出されてしまうためUIがフリーズした状態になってしまいます。

何か解決策があるのでしょうか?

アドバイスのほどよろしくお願いします。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-07-04 13:24
ずばり言いますと「WaitOne()を呼び出さなければ良い」ですね。

WaitOne()はシグナルを受信するまで待機(現在のスレッドをブロック)します。
http://msdn.microsoft.com/ja-jp/library/58195swd(VS.80).aspx

ですので、UIがフリーズしてしまうのは至極当然の事です。

非同期受信を行っているわけですから、受信完了時には
指定のコールバック関数(BeginReceiveに渡しているデリゲート)が呼び出されます。
つまり受信完了時の処理はコールバック関数内で行えば良いですよね。

MSDNのサンプルはあくまで「サンプル」です。(そのままでは実用にはむいてない)
サンプルが為、WaitOneを呼び出している感じです。
(でないとプロセスが終了してしまい、受信完了前にプロセス終了するかもしれませんので)

サンプルをそのままコピペするのではなく、サンプルを参考にしながら
1行1行理解し、希望する動作をするコードを記述した方が良いと思います。

あとはマルチスレッドについて調べてみるのも良いですね。
akcy
会議室デビュー日: 2008/07/04
投稿数: 5
投稿日時: 2008-07-05 18:54
くまっちさん返信ありがとうございます。

今後は、一行一行考えながら書いて見ます。あと、マルチスレッドについても調べてみようと思います。

また、質問することがあるかもしれませんが、またお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)