读书人

winform多线程有关问题

发布时间: 2013-02-24 17:58:56 作者: rapoo

winform多线程问题
我在winform中,窗口左边是treeview展示的设备列表,右边是选中设备的检测信息,我在窗口启动时启动一个检测线程,一直在那边循环。当选中的设备改变时,我把检测的ip地址更换一下重新进行检查。但碰到一个问题,如果某一设备由于还在检测过程中,需要result = (SnmpV1Packet)target.Request(pdu, param)返回后才能开始执行新的设备的检测,这样在某设备不在线的时候反应会比较慢,我应该如何实现来避免这种情况?
[解决办法]
不然可能系统资源占用大一些
[解决办法]
四楼的回答是正解
[解决办法]
如果没有异步方法,只能多开线程。
[解决办法]
用线程池多好

没选择一个设备就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
}), "完成设备检测");
}

读书人网 >C#

热点推荐