【发布时间】:2014-09-01 22:32:54
【问题描述】:
我正在尝试使用多线程来调用此函数。当我运行程序时,我得到一个异常“索引超出范围”。当我尝试打印 '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();
}
【问题讨论】:
-
对我来说,在循环中构造
BackgroundWorker实例看起来非常很奇怪。 -
我想创建等于 serviceidlist.count 的线程数
-
有些时候
BackgroundWorker是工作的正确工具 - 在其他时候则不是。就是这种情况……
标签: c# multithreading backgroundworker