gpt4 book ai didi

c# - For循环在列表框中的第一个项目之后停止迭代

转载 作者:行者123 更新时间:2023-12-03 13:21:26 26 4
gpt4 key购买 nike

我有一个for循环,我想(对于ListBox中的每个项目)执行一个方法。

现在发生的是选择了第一个项目,正在执行该方法,但是随后它没有选择第二个项目,而是坐在那里。

你能帮我吗?

这是我的for循环的样子:

for(int i = 0; i < listBox8.Items.Count; i++) {
listBox8.SetSelected(i, true);
listBox8.SelectedIndex = 0;

Thread t = new Thread(signinmobile);
t.Start();
CheckForIllegalCrossThreadCalls = false;
}

这是我的子:
public void signinmobile()
{
string yourString = listBox8.SelectedItem.ToString();
string[] strArray = yourString.Split(':');

System.Net.ServicePointManager.Expect100Continue = false;
string postData = "authenticity_token=401538d41ace8f334c3d&username=" + strArray[0] + "&password=" + strArray[1] + "";
CookieContainer tempCookies = new CookieContainer();
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteData = encoding.GetBytes(postData);

HttpWebRequest postReq = (HttpWebRequest)WebRequest.Create("https://mobile.twitter.com/session");
postReq.Method = "POST";
postReq.KeepAlive = true;
postReq.CookieContainer = tempCookies;
postReq.ContentType = "application/x-www-form-urlencoded";
postReq.Referer = "https://mobile.twitter.com/session";
postReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)";
postReq.ContentLength = byteData.Length;

Stream postreqstream = postReq.GetRequestStream();
postreqstream.Write(byteData, 0, byteData.Length);
postreqstream.Close();
HttpWebResponse postresponse = default(HttpWebResponse);

postresponse = (HttpWebResponse)postReq.GetResponse();
tempCookies.Add(postresponse.Cookies);
StreamReader postreqreader = new StreamReader(postresponse.GetResponseStream());

string accountstatus = postreqreader.ReadToEnd();

webBrowser1.DocumentText = accountstatus;

if (accountstatus.Contains("Sign in information is not correct"))
{
listBox9.Items.Add(listBox8.SelectedItem.ToString() + "\r");
while (listBox8.SelectedItems.Count > 0)
{
listBox8.Items.Remove(listBox8.SelectedItems[0]);
}
}
else
{
listBox2.Items.Add(listBox8.SelectedItem.ToString() + "\r");

while (listBox8.SelectedItems.Count > 0)
{
listBox8.Items.Remove(listBox8.SelectedItems[0]);
}
}
}

最佳答案

下一行始终为每个循环选择第一项

listBox8.SelectedIndex = 0;

我相信您可以完全删除此行,因为上一个( listBox8.SetSelected(i, true);)已经选择了

编辑:由于问题已更新

我觉得这里可能会发生异常。在 try/catch(Exception ex)方法调用周围添加 signinmobile块,并告诉我们是否处理了eny异常。

顺便说一句,为什么要在另一个线程中运行方法?似乎存在线程同步问题,因此如果列表包含两个以上的项目,则多个线程将运行并删除列表中的项目,然后调用 SetSelected失败,因为它缓存了由于某个线程已删除的项目而当前不存在的索引值 i。因此,请在单线程中全部运行,或者在 t.Join()之后执行 t.Start(),以便主线程将等到工作线程完成后再继续下一个循环周期。

关于c# - For循环在列表框中的第一个项目之后停止迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com