我想要一段测试代码,它创建一个任务集合,然后在不久的将来某个随机时间用每个任务的索引调用一个方法。
我是这样写的:
Random rnd = new Random();
for (Int32 taskIndex = 0; taskIndex < 10; taskIndex++)
{
_tasks.Add(String.Format("Task_{0}", taskIndex));
Progress.AddItem(_tasks[taskIndex]);
Int32 timeDelay = 5 + rnd.Next(10);
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromSeconds(timeDelay);
dispatcherTimer.Tick += (sndr, eArgs) =>
{
dispatcherTimer.Stop();
Progress.SetItemStatus(taskIndex, Status.Executing);
};
dispatcherTimer.Start();
}
当它运行时,它总是将 10 作为 taskIndex 传递给 Progress.SetItemStatus()。我理解为什么会这样(谢谢,Skeet 先生)——因为 taskIndex 是在匿名方法中捕获的,并在方法执行时使用它的值。
我想知道的是实现我的目标的最优雅的方式,即在设置 Tick 事件时传递实例中的值。