线程间操作无效: 从不是创建控件“控件id”的线程访问它。(.net跨线程执行方法)

如果一个操作涉及到跨线程,即此操作不是被调用的控件所产生的线程所调用,那么从.net3.5以后就会安全性判断, 2.0解决办法是可以设置CheckForIllegalCrossThreadCalls,但是强烈不推荐这样做。

1  delegate void DelListHandler(string number);

 

     /// <summary>
        /// 按标识删除listview内容
        /// </summary>
        /// <param name="number">标识</param>
        private void DelListViewLog(string number)
        {
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                if ((string)listView1.Items[i].Tag == number)
                {
                    listView1.Items[i].Remove();
                }
            }

        } 
     
 1                //判断对lvInfo执行的方法是否跨线程
 2                         if (this.listView1.InvokeRequired)
 3                         {
 4                             //把删除lvInfo订单内容的方法交给委托回调DelListHandler去处理
 5                             DelListHandler dellisthandler = new DelListHandler(DelListViewLog);
 6                             this.listView1.BeginInvoke(dellisthandler, minfo.Order);  //异步去执行委托回调dellisthandler,删除lvInfo的订单内容
 7                         }
 8                         else
 9                         {
10                             //如果执行方法不是跨线程,那么就直接执行
11                             DelListViewLog(minfo.Order);
12                         }

 

 

posted @ 2014-05-26 14:47  Emerald_Sword  阅读(163)  评论(0)    收藏  举报