gpt4 book ai didi

c# - System.Windows.Forms.Timer - NullReferenceException

转载 作者:行者123 更新时间:2023-12-02 17:48:41 28 4
gpt4 key购买 nike

对于今天发生在一台机器上的 NullReference 异常,是否有任何解释。我无法在我的电脑上复制它....

class Test
{
Timer timer_;
public void Init()
{
timer_ = new Timer();
timer_.Interval = 10000;
timer_.Tick += OnTimerTick;
timer_.Start();
}

private void OnTimerTick(object sender, EventArgs e)
{
timer_.Stop();
timer_ = null; <--- Null Ref occurs
}
}

基于 Mark Hall 和 Rich Okelly 的绝妙建议的解决方案

private void OnTimerTick(object sender, EventArgs e)
{
var localTimer = Interlocked.Exchange(ref timer_, null);
if (localTimer != null)
{
localTimer.Stop();
localTimer.Tick -= OnTimerTick;
localTimer.Dispose();

// doing staff
}
}

最佳答案

我认为空引用异常实际上发生在上面一行:at timer_.Stop()

发生的事情是引发了 Tick 事件并安排了另一个事件,由于第一个 Tick 事件,计时器停止并设置为 null。然后,第二个 Tick 事件尝试调用 Timer 上的 Stop,它现在为 null。

您可以使用 Interlocked 方法解决此问题:

private void OnTimerTick(object sender, EventArgs e)
{
var localTimer= Interlocked.Exchange(ref timer_, null);
if (localTimer != null)
{
localTimer.Stop();
}
}

关于c# - System.Windows.Forms.Timer - NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331894/

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