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