winform中的多线程问题[不知该怎么弄了,请教]
公司让做一个实时监控的桌面软件
在mainform中有3个功能
1、每间隔一定时间采集一次监控数据;
2、每间隔一定时间将掉线的客户端服务器成列出来
3、每间隔一定时间将采集出来数据进行汇总显示出来
刚开始的想法觉得这个很简单,很容易实现,开几个多线程就行了
以第2条为例:
首先想到的是用System.Threading.Timer,功能很快就实现了,接着问题也出来了,如果设置的刷新
时间要是比程序的处理时间少的话,线程池很快就被耗尽。
为了解决这个问题,现在采用了invoke;
代码:
Thread Clientthread = null;
public MainForm()
{
Clientthread = new Thread(new ThreadStart(ShowClientServer));
Clientthread.IsBackground = true;
Clientthread.Start();
}
void ShowClientServer()
{
while (true)
{
ShowClient();
Thread.Sleep(_showInterval * 1000 * 60);
}
}
delegate void dshowClientData();
void ShowClient()
{
if (this.InvokeRequired)
{
this.Invoke(new dshowClientData(ShowClient));
}
else
{
showClientData();//将数据显示在mainform中
}
}