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

winform 多线程 UI假死问题
正在做一个winform程序,选中listview的一行,会有一个比较耗时的操作,操作结束后会修改10几个label的值,发现选择了listview某行后,经常UI假死,选择其他的记录会停顿滞后。我想新建一个线程去处理它,每个label控件都要写委托吗?10几个实在是太多了,有没有更好的办法统一做?不容易造成UI假死 

------解决方案--------------------
1 把方法这样写:  
       
 void  Test(string msg)
        {
            if (InvokeRequired)
            {
                this.Invoke(new Action<string>(Logging2),msg);
            }
            else
            {
               Logging2( msg);
            }
        }

        private void Logging2(string msg)
        {
          //----这里写你对UI的实际操作
        }


2 另一线程调用:以 ThreadPool.QueueUserWorkItem为例
 ThreadPool.QueueUserWorkItem(Somemethod);


3 关键在于 
            if (InvokeRequired)
            {
                this.Invoke(new Action<string>(Logging2),msg);
            }