2009-12-03 52 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