你需要把监听的线程终止,才能完整的退出程序。
语法为:Thread.Abort();
语法为:Thread.Abort();
解决方案 »
- 探讨魔兽dota改建原理
- js get 方法拒绝访问
- 求教:WebBrowser<table>动态加行<tr>不显示的问题 多谢40分
- WinForm中数据的读取与判断(2)
- 关于如何判断变量是bool类型的问题
- 如何在CS编程设置Async="true" AsyncTimeout="5800"两指令
- 各位大虾帮帮忙,急急急!在线等,现场给分!!
- 怎样将DataList导出到Excel中,并在Excel中保留DataList中的颜色属性
- 关与asp.net中的flash
- 高手请进!Hashtable的value是自定义类型时,如何取value?
- 3维坐标到平面的转换
- 多文档窗体的子窗体怎么样在一起就最大化。
private Thread thread;重写X关闭事件,判断线程是否关闭
如果没有关闭,手工把它关闭
改成private Thread thread了,并添加了代码: private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (thread.IsAlive)
{
thread.Suspend();
thread.Abort();
}但是不行啊~~~怎么弄啊?
也许你程序退出的时候关闭sock对象就好了
private void accp()
{
hostEntry=Dns.GetHostByName(hostName);
IPAddress myIP=hostEntry.AddressList[0];
MyServer=new IPEndPoint(myIP,2525);
sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
sock.Bind(MyServer);
sock.Listen(50);
while(true)
{
【accSock=sock.Accept();】 此处出错!
if(accSock.Connected)
{
richTextBox1.AppendText("client connected!\r\n");
Thread thread=new Thread(new ThreadStart(round));
thread.Start();
}
}
}
提示:未处理的“System.Net.Sockets.SocketException”类型的异常出现在 system.dll 中。其他信息: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。是因为关闭了sock了吧?
sock.Close();这是必须的,监听是要明确的进行停止2,你的while(true) 这是一个严重的错误,这就是为什么VB6没有提供线程的原因,你必须对线程机制有所了解才推荐你使用多线程,你那样的死循环打算如何结束?强制about 也会引发异常,这是MS不推荐的。
Process[] p = Process.GetProcessesByName("XXXXXX");
foreach(Process process in p)
{
process.Kill();
}
private bool isQuit = new bool();
Thread Deal;
线程范例
private void thread_real()
{
while(true)
{
//do something;
lock(typeof(bool))
{
if (isQuit)
{
//此处可以结束sock监听
break;
}
}
}
}
启动线程
private void Button2_Click(object sender, System.EventArgs e)
{
lock(typeof(bool))
{
isQuit = false;
}
Deal = new Thread(new ThreadStart(thread_deal));
Deal.Start();
}
结束线程
private void Button1_Click(object sender, System.EventArgs e)
{
lock(typeof(bool))
{
isQuit = true;
}
}
2,
你的while(true) 这是一个严重的错误,这就是为什么VB6没有提供线程的原因,你必须对线程机制有所了解才推荐你使用多线程,你那样的死循环打算如何结束?强制about 也会引发异常,这是MS不推荐的。while(true)并不是你所说是严重错误,使用线程很多时候都会这样使用死循环,要不然你怎么能让你的程序能够在无人监视的情况下自动运行,除非人为停止。只要恰当的使用线程同步机制处理就行了
先谢两位!
是什么意思???
在此特别感谢fancyyin(死者)!!!
我是用的udpclient建立组播联接
也是新开始了一个线程
专门用于接收数据udpclient.Receive(...);接收信息
可是当receive没有接收到数据时
它就一直处于接收状态
在外部结束线程就抛出异常
要是不结束线程直接关闭udpclient也会抛出异常
不结束线程的话关闭程序后线程还在运行
为什么这个receive方法没有时间参数
哪位高手帮忙解决以下