C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: OverlappedAsyncResult?


(過去ログ 98 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■58851 / inTopicNo.1)  OverlappedAsyncResult?
  
□投稿者/ L82 (1回)-(2011/04/28(Thu) 14:11:18)

分類:[.NET 全般] 

Net.Sockets.Socket.BeginReceiveメソッドを使い、
コールバック関数が無事呼び出されるまでは良かったのですが
コールバック関数の引数の型をウォッチで見るとOverlappedAsyncResultとなっています。
これはオブジェクトブラウザで見ても出てこないのですが、
どうやって使えば良いのでしょうか。
ちなみにOverlappedAsyncResultのResultプロパティを参照したいです。
コールバック関数はこのようになっています

Private Sub BeginReceiveLogin(ByVal ar As IAsyncResult)

Dim ByteReceive() As Byte = CType(ar.AsyncState(), Byte())

End Sub

この引数 ar がウォッチだとOverlappedAsyncResultになっています。
イメージでは
Dim CopyBytes as Integer = ar.Result
みたいな感じで使いたいです
引用返信 編集キー/
■58852 / inTopicNo.2)  Re[1]: OverlappedAsyncResult?
□投稿者/ Hongliang (773回)-(2011/04/28(Thu) 14:30:45)
コールバックの引数はあくまで IAsyncResult なので、この範囲内で扱ってあげてください。
例えば、BeginReceive の引数 state に buffer で渡したのと同じバイト配列を渡せば、IAsyncResult.AsyncState プロパティから取得できます。
また BeginReceive のコールバックでは必ず EndReceive を呼び出す必要があります(実際に受け取ったバイト数がこのメソッドの返値になります)。

サンプルとしては
http://msdn.microsoft.com/ja-jp/library/dxkwh6zw.aspx
辺りを参考にしてみてください。
引用返信 編集キー/
■58854 / inTopicNo.3)  Re[1]: OverlappedAsyncResult?
□投稿者/ 魔界の仮面弁士 (2160回)-(2011/04/28(Thu) 14:44:51)
No58851 (L82 さん) に返信
> コールバック関数の引数の型をウォッチで見るとOverlappedAsyncResultとなっています。
System.Net.Sockets.OverlappedAsyncResult は内部クラスです。
.NET Framework が内部的に利用する物であり、開発者が意識する必要ありません。

そのまま、IAsyncResult インターフェイス型の変数として取り扱いましょう。
http://msdn.microsoft.com/ja-jp/library/system.iasyncresult%28VS.80%29.aspx


> どうやって使えば良いのでしょうか。
> Dim ByteReceive() As Byte = CType(ar.AsyncState, Byte())
ar.AsyncState から返されるのは、任意のユーザー定義オブジェクトです。

Socket の BeginReceive メソッドを呼び出す際に、
 BeginReceive(Byte(), Integer, Integer, SocketFlags, AsyncCallback, Object) As IAsyncResult
というメソッド(あるいはそのオーバーロード)を呼び出したかと思いますが、ar.AsyncState から返されるのは、
その最後の「ByVal state As Object」引数に渡したオブジェクトそのものです。


> Dim CopyBytes as Integer = ar.Result
> みたいな感じで使いたいです
データ長を知りたいのであれば、その ar As IAsyncResult な引数を
Socket インスタンスの EndReceive メソッドに渡してみてください。

http://msdn.microsoft.com/ja-jp/library/w7wtt64b%28VS.80%29.aspx
http://codezine.jp/article/detail/22
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -