winform多线程问题
我在winform中,窗口左边是treeview展示的设备列表,右边是选中设备的检测信息,我在窗口启动时启动一个检测线程,一直在那边循环。当选中的设备改变时,我把检测的ip地址更换一下重新进行检查。但碰到一个问题,如果某一设备由于还在检测过程中,需要result = (SnmpV1Packet)target.Request(pdu, param)返回后才能开始执行新的设备的检测,这样在某设备不在线的时候反应会比较慢,我应该如何实现来避免这种情况?
winform
多线程
刷新
------解决方案--------------------你不是知道了么?用后台线程不行吗?
------解决方案--------------------为每个设备开个线程 每个线程设个sleep时间
------解决方案--------------------不然可能系统资源占用大一些
------解决方案--------------------四楼的回答是正解
------解决方案--------------------如果没有异步方法,只能多开线程。
------解决方案--------------------用线程池多好
没选择一个设备就queue一个线程
不过这得要求你得检测方法支持并行执行
代码大致这样
private void OnSelect(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem(CheckDeviceProc, 1);
}
void CheckDeviceProc(object state)
{
var id = (int)state;
// check device by id
// 由于这里没有执行在UI线程上,需要通过Invoke来通知UI
this.Dispatcher.Invoke(new Action<string>(message => {
// 这里的代码会被执行在UI线程上
// 在此处更新UI
}), "完成设备检测");
}