2009-12-03 61 views
0

我有一个线程在后台周期性地尝试更新一个ListView组件,但每次它尝试我得到一个“跨线程操作无效:控制'dlList'从创建线程以外的线程访问。“错误。我已经使用委托来尝试解决这个问题,但它没有解决问题。我的代码有问题吗?我也尝试调用,而不是BeginInvoke,但同样的问题。跨线程调用ListView

delegate void updateListItemDelegate(string tag, ListViewItem lv); 
    private void updateListItem(string tag, ListViewItem lv) 
    { 
     if (this.dlList.InvokeRequired) 
     { 
      this.dlList.BeginInvoke(new updateListItemDelegate(updateListItem),tag,lv); 
      return; 
     } 
     else 
     { 
      int index = -1; 
      foreach (ListViewItem x in dlList.Items) 
      { 
       if (x.Tag.ToString() == tag) 
        index = x.Index; 
      } 
      if (index != -1) 
      { 
       dlList.Items[index].SubItems[1] = lv.SubItems[1]; 
       dlList.Items[index].SubItems[3] = lv.SubItems[3]; 
      } 
     } 
    } 

通过调用:

updateListItem(x.url, x.details); 
+0

到底抛出的异常究竟在哪里?你能从异常中分享调用堆栈吗? – 2009-12-03 06:47:28

回答

0

啊。我在记录异常的代码周围尝试了{catch},没有意识到我在类中设置的ListView项目也需要委托对它进行调用以及对窗体组件进行调用。好的提示弗雷德里克!

+0

记得在你有一个答案时接受答案。 – 2009-12-04 18:48:22