c# - 任务在应该完成的时候一直循环

标签 c# winforms loops task

我正在尝试让我的帐户通过任务进行多次登录。我绝不是专家,我才刚刚开始,但我遇到了以下问题。

由于某种原因,任务不断循环,但它们不应该循环。我实在无法弄清楚问题出在哪里,所以我想这里有人可能知道解决方案。

public async void Login()
{
    for (int i = 0; i < objectsToCreate; i++)
    {
        try
        {
            this.Invoke((MethodInvoker)delegate()
            {
                MyEmail = listView1.Items[i].SubItems[0].Text;
                MyPassword = listView1.Items[i].SubItems[1].Text;
                MySecurity = listView1.Items[i].SubItems[2].Text;
            });
            var loginDetails = new LoginDetails(MyEmail, MyPassword, MySecurity, Platform.Ps3);
            client[i] = new FutClient();
            var loginResponse = await client[i].LoginAsync(loginDetails);
            MessageBox.Show("Succesful login");
        }
        catch (Exception ex)
        {
            string foutMelding = ex.InnerException.ToString();
            ListViewItem exception = new ListViewItem(time);
            exception.SubItems.Add(foutMelding);
            listView2.BeginInvoke(new MethodInvoker(() => listView2.Items.Add(exception)));
        }
    }
}
public void StartLogin()
{
    Task[] tasks = new Task[objectsToCreate];
    for (int i = 0; i < objectsToCreate; i++)
    {
        tasks[i] = new Task(() => Login());
    }
    foreach (Task task in tasks)
    {
        task.Start();
    }
}

我使用表单中的按钮调用 StartLogin 方法。然后它继续登录帐户,但由于某种原因任务不断循环,我真的无法找出原因,因为我才刚刚开始使用任务。如果有人能帮助我,我将非常感激。

最佳答案

它不会无限循环 - 它恰好执行 16 次。这是因为您本质上有一个双重嵌套的 for 循环 - 一个在 StartLogin 方法中,另一个在您的 Login 方法中。也许您不希望每次调用 Login 方法时,Login 方法的内容都会执行 4 次?

关于c# - 任务在应该完成的时候一直循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028463/

相关文章:

c# - 应用程序使用的 DLL 的热卸载/重新加载

c# - WinForms 死于 Microsoft.Toolkit.Win32.UI.Controls.WinForms.WebView 的 EndInit

c# - 按钮数组的点击事件

c# - 在带有子窗体的 WinForms 应用程序中进行依赖注入(inject)

programming-languages - 为什么某些编程语言会限制您编辑正在循环的数组?

javascript - 如何使这个异步 foreach 循环与 promises 一起工作?

c# - RabbitMQ 基本恢复不起作用

c# - EF 迁移应该去哪里,我的类库项目还是我的 ASP.NET 项目?

c# - 有效地扫描进程的内存

c - 字符串不允许 float /十进制数