初学C#网络编程(二)处理进程结束时事件
2010-01-25 20:28
531 查看
public void AddLog(string text) //添加日志 { if (this.listBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(AddLog); try //添加异常处理,当有连接窗口关闭时会出现一异常 { this.Invoke(d, new object[] { text }); } catch { return;//出现异常则直接返回 } } else { this.listBox1.Items.Add(text); } } public class ThreadServer { public TcpListener Svr; public List<TrSok> mls = new List<TrSok>(); Form1 t; public ThreadServer(Form1 l) { Svr = new TcpListener(IPAddress.Any, 6060); t = l; Svr.Start(); } public void listxc() { for (int i = mls.Count - 1; i >= 0; i--) { if (mls[i].huishou) { mls[i] = null; mls.RemoveAt(i); } } int MaxWorkerThreads, miot, AvailableWorkerThreads, aiot; //获得最大的线程数量 ThreadPool.GetMaxThreads(out MaxWorkerThreads, out miot); AvailableWorkerThreads = aiot = 0; //获得可用的线程数量 ThreadPool.GetAvailableThreads(out AvailableWorkerThreads, out aiot); // 返回线程池中活动的线程数 t.AddLog("存活线程数:" + (MaxWorkerThreads - AvailableWorkerThreads).ToString()); t.AddLog("存活 IO 数:" + (miot - aiot).ToString()); t.AddLog("存活连接数:" + mls.Count.ToString()); } public void Strat() { while (true) { Socket mySocket = Svr.AcceptSocket(); TrSok m = new TrSok(mySocket,t); mls.Add(m); ThreadPool.QueueUserWorkItem(new WaitCallback(m.send)); listxc(); } } public void Stop() //添加断开方法,释放资源 { for (int i = mls.Count - 1; i >= 0; i--) { if (mls != null) { mls[i].tcpc.Close(); mls[i] = null; mls.RemoveAt(i); } } Svr.Stop(); } }
类中的一些修改
mts.Abort(); ms.Stop();
窗口关闭事件
当窗口关闭时,线程池中的线程不能终止,所以会造成程序不能退出,改进一下。
相关文章推荐
- C#捕捉进程开始和结束事件
- 启动一个进程并处理进程结束事件
- 【网络编程】服务端的I/O模型,事件处理模式,并发模式
- 网络编程:处理僵死进程和被中断的系统调用
- 【网络编程】处理定时事件(三)---看看Libco的时间轮
- 初学C#网络编程
- 启动一个进程并处理进程结束事件
- [C#网络应用编程]1、对进程的操作
- TCP网络编程最本质是的处理三个半事件
- 【网络编程】处理定时事件(二)---利用信号通知
- C#网络编程——第一篇 基础之进程线程
- 【手机网络游戏 编程】C#异步socketAPI调用 处理数据的流程
- Linux C语言编程-Linux网络通信--Linux上使用套接字(socket)来处理信息---编写一个单进程非阻塞多客户的套接字客户端
- 启动一个进程并处理进程结束事件
- 【网络编程】处理定时事件(一)---模拟Redis实现(C++)
- C#网络编程——第一篇 基础之进程线程
- C#网络编程之进程管理
- C#捕捉进程开始和结束事件
- C#网络编程基础之进程和线程详解
- linux网络多进程编程处理僵尸进程