关于异步TCP发送文件的问题请教

huangchao610610 2011-07-18 09:36:59
//先發送文件名到服務器端
SendToServerDelegate d = new SendToServerDelegate(SendToServer);
IAsyncResult iarName = d.BeginInvoke(byteBuffer,byteBuffer.Length, null, null);

while (true)
{
if (iarName.IsCompleted)
{
break;
}
else
{
Thread.Sleep(300);
}
}

上面的代码是向服务器端异步发送一个文件件 我没有搞懂既然用异步为什么要用下面的while 等待异步完成? 这样做和同步有什么区别吗?

还有一个问题; SendState sendState = new SendState(); //这是一个结构体 上面存放了调用委托的变量SendToServerDelegate 和IAsyncResult 结果

sendState.d = d;
sendState.rulst = iarName;

Thread threadSend = new Thread(new ParameterizedThreadStart(EndSendToServer));
threadSend.Start(sendState);

private void EndSendToServer(object SendStruct)
{
SendState s = (SendState)SendStruct;
s.d.EndInvoke(s.rulst);
}
这段代码是紧接着上面那段代码的 为什么要在一个线程中调用 EndInvoke方法 我把 EndInvoke方法直接提到上面的while 后面 在服务器端就接收不到文件名 我有点晕了? 请大家帮我讲讲这个吧 关于异步的原理及流程 谢谢。
...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsh1985 2011-07-20
  • 打赏
  • 举报
回复
异步,同步最后都是要调用这个的Invoke函数,相当于事务的提交
huangchao610610 2011-07-20
  • 打赏
  • 举报
回复
異步的調用原理我大概清楚了 我想問 while (true)
{
if (iarName.IsCompleted)
{
break;
}
else
{
Thread.Sleep(300);
}
}
這樣的寫法不是跟同步是一樣的效果嗎
openwhitewater 2011-07-19
  • 打赏
  • 举报
回复
BeginInvoke调用时可以直接将回调函数作为其参数,这样当异步处理结束之后会调用这个回调函数,在这个回调函数中执行EndInvoke就可以了。
异步的原理和流程MSDN上有,你自己查查看。
sdl2005lyx 2011-07-19
  • 打赏
  • 举报
回复
帮你顶!

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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