C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[1]: OverlappedAsyncResult?
(過去ログ 98 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 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
-