如何在回调函数中传递参数?

zteclx 2010-06-21 11:29:19
类似如下代码:
(1)IAsyncResult result=clientSock.BeginConnect(epserver,new AsyncCallback(OnConnect),clientSock);
……
(2)public void OnConnect(IAsyncResult ar) {//回调函数
在(1)中的new AsyncCallback(OnConnect),是没有参数的,为什么(2)中却带了一个实参?

在(2)中如果加一个参数,变成public void OnConnect(Byval str1,IAsyncResult ar),可以这样用吗?如果可以,在(1)中该如何写new AsyncCallback(OnConnect)?
...全文
254 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2010-06-22
  • 打赏
  • 举报
回复
那就不要传咯
xray2005 2010-06-22
  • 打赏
  • 举报
回复
学习MSDN吧。

Socket.BeginConnect 方法

基本异步、回调知识的还是知道,然后再使用。要不然,你的代码写的也很辛苦。
xray2005 2010-06-22
  • 打赏
  • 举报
回复
new AsyncCallback(回调的方法名);当然不需要参数了。


加一个参数,那么你这么写:
IAsyncResult result=clientSock.BeginConnect(epserver,new AsyncCallback(OnConnect),str1);

然后

public void OnConnect(IAsyncResult ar)
{
string s = (string )ar.AsyncState;//取得你传递过来的str1

}











myhope88 2010-06-22
  • 打赏
  • 举报
回复
路过,帮顶下
zteclx 2010-06-22
  • 打赏
  • 举报
回复
都是些啥玩意儿
zteclx 2010-06-22
  • 打赏
  • 举报
回复
楼上,你的说法也不对。
IAsyncResult result=clientSock.BeginConnect(epserver,new AsyncCallback(OnConnect),str1);
BeginConnect没有这种用法。
看看MSDN吧(VB.NET)
  • 打赏
  • 举报
回复
刚好写了一个异步传输文件的程序,把部份代码供你参考

定义要传输的类:
struct socketObject
{
public Socket soc;
public int sendedLen;
public socketObject(Socket soc, int len)
{
this.soc = soc;
this.sendedLen = len;
}
}
异步发送,并带上要传递的对像:
soc.BeginSend(_dataBuffer, 0, readLength, SocketFlags.None, new AsyncCallback(onSend), new socketObject(soc, readLength));
处理传递的对像:
public void onSend(IAsyncResult ar)
{
try
{
socketObject socObj = (socketObject)ar.AsyncState;
Socket soc = socObj.soc;
soc.EndSend(ar);
System.Object lockThis = new System.Object();
lock (lockThis)
{
_sendedLen = _sendedLen + socObj.sendedLen;
}
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
_isOk = false;
_isEnd = true;
}


}

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧