2013-02-14 107 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