作者teamspike (市政府7F)
看板C_Sharp
标题[问题] 这种状况,表示得用多执行绪吗
时间Fri May 30 11:13:17 2008
各位前辈早安
小弟刚刚想用TcpListener实作网路连线
於是很开心的作一个只有两个按钮的小server
一个监听连线,一个停止监听这样
就姑且叫button_Connect和button_disConnect吧
小弟原本以为很简单的实作,就给他弄成下面那样
private void button_Connect_Click(object sender, eventargs e)
{
. .
. .
. .
10 myTcpListener.Start();
11 mySocket = myTcpListener.AcceptSocket();
. .
. .
}
private void button_disConnect_Click(object sender, eventargs e)
{
myTcpListener.Stop();
}
很开心的执行了以後,发现会卡在按钮Connect的第十行呢!!
查了一下说明,原来AcceptSocket()会锁定程式执行,
傻傻的在那边等Socket连线呢...
咦?原来可以先用Pending()来判断吗?
那没人理我的时候就先不要AcceptSocket()不就好罗
於是兴冲冲的在第10行和第11行中间加上了
while(!myTcpListener.Pending()) {};
於是自以为很聪明的我,这次跟着小程式跑无限回圈
button_disConnect根本按不下去...
很直觉的想法是,按下执行,就好像派出一个小绿人开始出发
这时候只有一个小绿人在程式码里面穿梭
当他在一个地方忙碌的时候,就没有办法去管其他地方的事情
因为button_Connect不管怎麽样都还是会留他下来喝茶
这时候如果多几个小绿人,比方说从button_disConnect再派出一个小绿人
执行button_disConnect的指令
小绿人2:"ㄟ该走了,我都已经Stop()了你不知道吗?"
小绿人1:"你不会早点说阿..."
於是程式很美满的结束
请问各位前辈,这种状况是不是该应用多执行绪呢?(还没看呢= =a)
就这个例子而言,该如何解决呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.216.193