gpt4 book ai didi

c# - 将不同的对象设置为 Timer.Elapsed

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:11 26 4
gpt4 key购买 nike

我想为每个对象分配不同的计时器。

每个对象都包含 Timer 作为类成员。

这就是我尝试过的:

private void EntityTimeElapsed(object sender, MyEntity myEntity)
{

}

foreach (MyEntity myEntity in entities)
{
myEntity.timer.AutoReset = true;
myEntity.timer.Elapsed += (sender, arguments) => this.EntityTimeElapsed(sender, myEntity);
myEntity.timer.Start();
}

问题是“EntityTimeElapsed”被最后一个“MyEntity”对象击中,而不是我想要的对象。

我该如何解决?

更新:

我目前使用的是 .Net 4.0

最佳答案

试试这个:

foreach (MyEntity myEntity in entities)
{
var myEntity2 = myEntity ;

myEntity2.timer.AutoReset = true;
myEntity2.timer.Elapsed += (sender, arguments) => this.EntityTimeElapsed(sender, myEntity2);
myEntity2.timer.Start();

http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx解释为什么您总是在 lambda 中看到 myEntity 的最后一个值。

关于c# - 将不同的对象设置为 Timer.Elapsed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18591537/

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