不明白的线程调用问题!!!!??????

lmist 2008-11-20 05:05:52
在程序的Server窗体中
public Server()
{
InitializeComponent();
//StartListen是自定义的一个开始监听的函数;
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();
}
通过加断点发现:
序在初始化后运行完上面两行代码之后,有时不调用StartListen(),在执行完Server_Thread.Start()语句后直接跳出,有时是在StartListen()的下面红色的语句处直接跳出或死机,没有反映
private void StartListen()
{
TcpListener Server_Listener=new TcpListener(IPAddress.Any,Int32.Parse("51888"));
}




在客户端的时候与上面一样:
public Client()
{
InitializeComponent();
//StartListen是自定义的一个开始监听的函数;
Thread C_Thread=new Thread (new ThreadStart(EstablishConnection));
C_Thread.Start();

}
出现同样的错误!
private void EstablishConnection()
{
Socket C_Socket=new Socket(AddressFamily.InterNerWork,SocketType.Stream,ProtocolType.Tcp);
C_Socket.Connect(Point);
//Ponit为定义的IPEndPoint;
}


我把
public Client()
{
InitializeComponent();
//StartListen是自定义的一个开始监听的函数;
[color=#FF0000]Thread C_Thread=new Thread (new ThreadStart(EstablishConnection));
C_Thread.Start();
[/color]
}
中蓝色的改为
public Client()
{
InitializeComponent();
EstablishConnection();
}
程序就能正常运行了,服务器和客户端都是这样,为什么???
我用try {}catch() 结果没有任何提示!!
请教!!!!!!!!!!!!!!!!!!!!!!
为什么直接调用函数就行???
通过线程调用就不行???????????????
...全文
195 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmist 2008-11-24
  • 打赏
  • 举报
回复
线程怎样调用方法?
求教相关方面知识……
啊兵 2008-11-22
  • 打赏
  • 举报
回复
我也在学习关于线程方面的资料,时刻关注你的贴子。
顶你上去
lmist 2008-11-22
  • 打赏
  • 举报
回复
在顶一下
lmist 2008-11-22
  • 打赏
  • 举报
回复
谢谢楼上的  可是我现在的问题是
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();
这两行代码在初始化的时候,不执行StartListen()为什么会出现这种情况???
而我把它放到Button的click事件里就能正常运行呢?
lmist 2008-11-21
  • 打赏
  • 举报
回复
再顶
为什么我在窗体上添加一个button按钮,然后将
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();
放在按钮的单击事件里却能正确执行,也能调用StartListen()实现监听,为什么??
这和放在
public Server()
{
InitializeComponent();
 //就是这里 
}有什么区别???
为什么会出现这种情况???????????????????????
lmist 2008-11-21
  • 打赏
  • 举报
回复
自己再顶一下,请教各位……
lmist 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wartim 的回复:]
应该说是构造函数执行完毕form show完后才能断到线程里的断点
所以如果你的线程没循环,在可以断到前线程就已经结束了
[/Quote]
我的程序是在初始化的时候,也就是
public Server()
{
InitializeComponent();
 //就是这里 
}开始建立新线程的,然后在调用的StartListen()里面通过 while(true)来实现循环监听的,
难道就是因为象你说的那样,线程没循环,所以就提前结束了????不可能啊,我有从网上下的一个例子,和我的程序几乎一样,但是却没出现我的问题,为什么啊?
我现在的主要问题是,在执行完,
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();
这两条语句后,并没有调用StartListen ()去执行监听,
我也按7楼说的在Form_Load加载的时候试了,也不行???
困惑…………
wartim 2008-11-21
  • 打赏
  • 举报
回复
应该说是构造函数执行完毕form show完后才能断到线程里的断点
所以如果你的线程没循环,在可以断到前线程就已经结束了
wartim 2008-11-21
  • 打赏
  • 举报
回复
会调用的,不过在构造函数里启动线程好像有点不一样,要等构造函数执行完毕form show完才会开始进线程

stoplisten当然是你想停用线程的时候,比如窗口退出
lmist 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wartim 的回复:]
简单写下


C# code

public Server()
{
InitializeComponent();
//StartListen是自定义的一个开始监听的函数;
TcpListener Server_Listener=new TcpListener(IPAddress.Any,Int32.Parse("51888"));
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();

}

void StartListen()
{
Listener.Start();
while (true)
{
TcpClient Cli…
[/Quote]

我的程序是在上面红色的地方不在进行下面的操作,就是不调用StartListen()方法,是什么原因 ?
还有 StopListen()在什么地方调用的?
wartim 2008-11-21
  • 打赏
  • 举报
回复
简单写下



public Server()
{
InitializeComponent();
//StartListen是自定义的一个开始监听的函数;
TcpListener Server_Listener=new TcpListener(IPAddress.Any,Int32.Parse("51888"));
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();
}

void StartListen()
{
Listener.Start();
while (true)
{
TcpClient Client = null;
try
{
Client = Listener.AcceptTcpClient(); // 阻塞,等待
...
}
}
}

void StopListen()
{
Listener.Stop();
Server_Thread.Abort();
}

lmist 2008-11-21
  • 打赏
  • 举报
回复
自己在顶一下……
请教!
derelictangel 2008-11-21
  • 打赏
  • 举报
回复
学习


PS:
我的目标是 ---->





















^_^
lmist 2008-11-21
  • 打赏
  • 举报
回复
我是在
public Server()
{
InitializeComponent();

//StartListen是自定义的一个开始监听的函数;
Thread Server_Thread=new Thread (new ThreadStart(StartListen));
Server_Thread.Start();
}
开始建立新线程执行的,这和在窗体的Form_Load处有什么不同?


还有象9楼的说的那样,我用的是.net2005,确实是经常在断点处不中断!!
NeptuneGrass 2008-11-21
  • 打赏
  • 举报
回复
看下这个能不能帮到你
http://www.netcsharp.cn/topictag-88.aspx

PS:要是对楼主有帮助的话...点下AD支持下吧
luckyboy101 2008-11-21
  • 打赏
  • 举报
回复
关注
shoucal 2008-11-20
  • 打赏
  • 举报
回复
我认为没有什么错误,但是在.NET开发中,经常发现跟踪的时候不能在设定断点处中断。
希望这个有点用http://honordream.blog.hexun.com/2858506_d.html
长沙三毛 2008-11-20
  • 打赏
  • 举报
回复
不要在构造函数做线程,在Form_Load里做似乎可靠点
zzultc 2008-11-20
  • 打赏
  • 举报
回复
执行完上面蓝色的语句后直接跳转至Form窗体界面!!!!
到底是为什么????

线程不就是这样吗?你开了一个辅助线程侦听端口,UI线程当然正常工作了!!

至于上边你说的,不能使用线程问题,我觉得,代码没有错误啊,服务端,你只是简单的侦听了一个端口,然后就返回了,对客户端,只是简单的连接了一下,也返回了。这不是很正常嘛!
啊兵 2008-11-20
  • 打赏
  • 举报
回复
关注一下
加载更多回复(4)

111,131

社区成员

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

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

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