gpt4 book ai didi

c# - 多线程时 i 的错误值?

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:54 24 4
gpt4 key购买 nike

我正在尝试使用多线程来调用此函数。当我运行该程序时,出现异常“索引超出范围”。当我尝试打印“i”的值时,我每次都得到 serviceids list.count。

在我的例子中,循环应该从 0 到 1 并打印这次i的值为0这次i的值为1

但是它打印了两次

这次i的值为2这次i的值为2

我的代码有什么问题,我该如何解决? DataDownloader 下载器 = new DataDownloader();

    for (int i = 0; i < serviceidslist.Count; i++)
{
BackgroundWorker bw = new BackgroundWorker();

bw.DoWork += new DoWorkEventHandler(
delegate(object o, DoWorkEventArgs argss)
{
BackgroundWorker b = o as BackgroundWorker;

Console.WriteLine("The value of i this time is {0}", i);
downloader.DoDownload(serviceidslist[i]);



});

bw.RunWorkerAsync();
}

最佳答案

只是一个想法,但是添加一个局部变量并将其分配给i:

int temp = i;

然后使用它:

Console.WriteLine("The value of i this time is {0}", temp);
downloader.DoDownload(serviceidslist[temp]);

我认为问题可能是您的 BackgroundWorker 正在关闭变量而不是值,因此每次在循环中都需要存储它的副本。

另见此处

What are 'closures' in C#? [duplicate]

关于c# - 多线程时 i 的错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24695366/

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