日期:2014-05-17  浏览次数:20684 次

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
            }), "完成设备检测");
        }