gpt4 book ai didi

c# - 定时器不会死(已经!)

转载 作者:行者123 更新时间:2023-11-30 18:08:10 34 4
gpt4 key购买 nike

一段时间以来,我一直在做这个反复出现的噩梦(阅读 - 我的应用程序中的错误)。出于某种原因,某个计时器在我停止后继续发送“Elapsed”事件,即使 在事件本身 计时器“承认”已被禁用!检查一下:

//Timer is created in Class' Constructor. Class is not static.
public PDAAccess ()
{
ConnectionTimeoutChecker = new System.Timers.Timer(1000);
ConnectionTimeoutChecker.Elapsed += new System.Timers.ElapsedEventHandler(ConnectionTimeoutChecker_Elapsed);
}

void ConnectionTimeoutChecker_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{ //_DeviceConTimeout eventually reaches A LOT MORE than 10.
if (_DeviceConTimeout > 10)
{
ConnectionTimeoutChecker.Stop(); //This is invoked but the timer DOES NOT STOP.
if (OnDeviceSyncTimeout != null) OnDeviceSyncTimeout(this, null); //This gets fired all the time.
}
_DeviceConTimeout++; //This keeps increasing and increasing.
//Worth mentioning: sender = Timer, sender.Enabled = false (!) so then why is this executing?
}

至于我从哪里开始它:我在一个地方开始它,我在那里放了一个断点并且它不会执行超过一次。在你问之前:不涉及多线程。我确实在这个应用程序中使用线程,但是:计时器不是在线程中创建的,类也不是。

然而 .Stop();执行了 100 次,计时器仍然不会停止。

我在这里完全不知所措。这种行为对我来说太奇怪了,它让我感到尴尬,觉得我可能错过了一些非常明显的东西。有时写这样的帖子可以帮助我在点击提交按钮之前识别问题(我们都知道“向第三方解释”的效果)。但它还没有击中我,所以我要按下按钮......看看你会看到什么::- D。

最佳答案

在黑暗中拍摄:也许对 OnDeviceSyncTimeout() 的调用以某种方式间接导致计时器重新激活?我知道你说它只在一个地方开始,但我不太确定你怎么能这么肯定。

关于c# - 定时器不会死(已经!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434326/

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