您的位置:首页 > 理论基础 > 计算机网络

初学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();


窗口关闭事件

当窗口关闭时,线程池中的线程不能终止,所以会造成程序不能退出,改进一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: