Listview工作不正常c#

Listview工作不正常c#,c#,visual-studio-2010,listview,C#,Visual Studio 2010,Listview,我在我的项目上有2个列表视图控件,其中一个运行得非常好,另一个直到最近都不知道为什么它的行为非常奇怪 有时它无法识别选中的属性,有时它会返回“”,当我们得到选中的属性时,它有时工作正常并返回True或False 下面是访问列表框的代码,请记住我有两个代码,其中一个工作得非常好,这两个代码用于获取检查状态 另外,当中间列的子文本总是返回“”时,它开始出现问题,而其他列却在工作,因此我必须更改代码以从数据表中获得所需的输出 更新 此外,当我处于调试模式并逐行运行时,它每次都工作正常,如果我运行它,它

我在我的项目上有2个列表视图控件,其中一个运行得非常好,另一个直到最近都不知道为什么它的行为非常奇怪

有时它无法识别选中的属性,有时它会返回“”,当我们得到选中的属性时,它有时工作正常并返回TrueFalse

下面是访问列表框的代码,请记住我有两个代码,其中一个工作得非常好,这两个代码用于获取检查状态

另外,当中间列的子文本总是返回“”时,它开始出现问题,而其他列却在工作,因此我必须更改代码以从数据表中获得所需的输出

更新

此外,当我处于调试模式并逐行运行时,它每次都工作正常,如果我运行它,它将无法获取值,并跳过行,或者可能无法识别选中的行

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);
                    }



                }
            }
for(int i=0;i
tmpVal=listView1.Items[i]。已选中
));
}
其他的
{
tmpVal=listView1.项目[i].已选中;
}
如果(tmpVal==true)
{
string senderEMail=string.Empty;
如果(listView1.InvokeRequired)
{
listView1.BeginInvoke(新方法调用程序(
() =>
senderEMail=listView1.Items[i]。子项[1]。Text.ToString()
));
}
其他的
{
senderEMail=listView1.Items[i]。子项[1]。Text.ToString();
}
int rowNumber=0;
string rNumber=string.Empty;
如果(listView1.InvokeRequired)
{
listView1.BeginInvoke(新方法调用程序(
() =>
rNumber=listView1.Items[i]。子项[3]。Text.ToString()
));
}
其他的
{
rNumber=listView1.Items[i]。子项[3]。Text.ToString();
}
rowNumber=Convert.ToInt16(rNumber.Trim());
如果(复选框2.选中)
{
//获取取消订阅URL(如果有)并发送电子邮件
字符串unSubscribeUrl=resultSheet.Rows[rowNumber-1][“UnsubscribeLink”].ToString();
string receiver=resultSheet.Rows[rowNumber-1][“receiver”].ToString();
如果(取消订阅URL!=“”)
{
unSubscribeUrl=unSubscribeUrl.Replace(“amp;”,“”)。Trim();
字符串html=getHtml(unSubscribeUrl);
}
//发送电子邮件
receiver=receiver.ToLower();
OutLook.Application oApp1=新建OutLook.Application();
OutLook.MailItem mail=oApp1.CreateItem(OutLook.OlItemType.olMailItem)作为OutLook.MailItem;
mail.Subject=“取消订阅| uitschrijven | gelieve geen邮件”;
mail.To=senderEMail;
SetAccount_2007_2010(邮件、收件人);
Marshal.ReleaseComObject(oApp1);
}
如果(复选框3.选中)
{
deleteSenderList.Add(senderEMail);
}
}
}

将对
BeginInvoke
的调用替换为对
Invoke
的调用-
BeginInvoke
将异步处理,这可能会导致计时问题。

如果将
bool
转换为
字符串,然后比较
是否为“True”,您一定会感到困惑
…是的,当时我可能有什么想法:D,但这不会导致问题,不是吗?此外,如果我每次调试代码,它都可以正常工作,如果我运行它,它就不会工作…这可能是因为调用
BeginInvoke
而不是
Invoke
导致的异步处理-请参阅我的答案。