我有以下循环,它为数组中的特定数量的名称启动任务。 整个事情都在后台工作者中运行。
在此示例中,三个名称将写入数组:
int i = 0;
foreach(string name in MainWindow.Globals.defaultNames)
{
Task t = new Task(() => DoWork(name, i));
bw.ReportProgress(i);
t.Start();
i++;
}
DoWork的任务开始如下:
private void DoWork(string name, int i)
{
Console.WriteLine("i = " + i);
Console.WriteLine(name);
string login = MainWindow.Globals.defaultUsername;
string pw = MainWindow.Globals.defaultPW;
...
string command = string.Format(changeName, login, pw, MainWindow.Globals.hostNames[i]);
奇怪的是,在MainWindow.Globals.hostNames[i]);
,程序抛出一个异常,表明数组的索引超出范围。
控制台输出显示" 3"对于i,这很奇怪,因为阵列中只有三个名字而且我从0开始。正确的数字应该是2.
有人有线索,为什么我是3或我得到+1?
非常感谢。
CRowland