2013-02-14 197 views
0

我有2 ListView控制我的項目其中一個工作完全正常,另一個直到最近不知道爲什麼它的演技非常非常奇怪。Listview不能正常工作c#

有時它不會承認的checked屬性,有時它會有時它會返回「」當我們選中的屬性有時工作正常,返回

訪問列表框的代碼如下,請記住我有2個完美的作品,它具有相同的獲取檢查狀態的代碼。

當中間列的子文字總是返回「」而其他人工作時,它開始出現問題,所以我必須更改代碼以從數據表中獲取所需的輸出。

UPDATE

此外,當我在調試模式和進一行行正常工作,每次並獲取價值,如果我運行它,它不會得到它,SKIPPS行或MAYBE不承認檢查行! BeginInvoke將異步處理,這可能會導致時序問題 -

for (int i = 0; i < listView1.Items.Count - 1; i++) 
      { 
       // string tmpVal = string.Empty; 
       bool tmpVal = false; 
       if (listView1.InvokeRequired) 
       { 
        listView1.BeginInvoke(new MethodInvoker(
         () => 

         tmpVal = listView1.Items[i].Checked 

          )); 
       } 
       else 
       { 
        tmpVal = listView1.Items[i].Checked; 
       } 

       if (tmpVal == true) 
       { 
        string senderEMail = string.Empty; 

        if (listView1.InvokeRequired) 
        { 
         listView1.BeginInvoke(new MethodInvoker(
          () => 

          senderEMail = listView1.Items[i].SubItems[1].Text.ToString() 

           )); 
        } 
        else 
        { 
         senderEMail = listView1.Items[i].SubItems[1].Text.ToString(); 
        } 

        int rowNumber = 0; 

        string rNumber = string.Empty; 


        if (listView1.InvokeRequired) 
        { 
         listView1.BeginInvoke(new MethodInvoker(
          () => 

          rNumber = listView1.Items[i].SubItems[3].Text.ToString() 

           )); 
        } 
        else 
        { 
         rNumber = listView1.Items[i].SubItems[3].Text.ToString(); 

        } 

        rowNumber = Convert.ToInt16(rNumber.Trim()); 

        if (checkBox2.Checked) 
        { 
         //GET UNSUBSCRUBE URL IF ANY HIT IT AND ALSO SEND EMAIL 

         string unSubscribeUrl = resultSheet.Rows[rowNumber - 1]["UnsubscribeLink"].ToString(); 
         string receiver = resultSheet.Rows[rowNumber - 1]["receiver"].ToString(); 
         if (unSubscribeUrl != "") 
         { 
          unSubscribeUrl = unSubscribeUrl.Replace("amp;", "").Trim(); 

          string html = getHtml(unSubscribeUrl); 
         } 

         //SENDING EMAIL 
         receiver = receiver.ToLower(); 

         OutLook.Application oApp1 = new OutLook.Application(); 
         OutLook.MailItem mail = oApp1.CreateItem(OutLook.OlItemType.olMailItem) as OutLook.MailItem; 

         mail.Subject = "unsubscribe | uitschrijven | gelieve geen mails te sturen"; 
         mail.To = senderEMail; 

         SetAccount_2007_2010(mail, receiver); 

         Marshal.ReleaseComObject(oApp1); 
        } 

        if (checkBox3.Checked) 
        { 
         deleteSenderList.Add(senderEMail); 
        } 



       } 
      } 
+0

如果你把'bool'轉換成'string',然後再比較''True'',你真的必須有一個困惑的想法...... – 2013-02-14 13:18:36

+0

是的,當時我心中可能有一些東西:D,造成這個問題呢?也如果我調試代碼,它每次都工作正常,如果我運行它不會... – confusedMind 2013-02-14 13:19:53

+0

這可能是因爲調用'BeginInvoke'而不是'Invoke'造成的異步處理 - 請參閱我的答案。 – 2013-02-14 13:39:33

回答

0

調用與調用Invoke替換爲BeginInvoke

+0

完美:) thanx很多。 – confusedMind 2013-02-14 13:52:54