[英]TimeSetEvent failing after a few seconds (NullReferenceException)
我正在使用TimeSetEvent并且其回调函数正常工作,但是几秒钟后,即使回调函数根本无效,它也会失败:
// Vars
private TimerEventHandler timerRef;
private uint timerId = 0;
//Later, where I use TimeSetEvent
timerRef = new TimerEventHandler(CallbackFunction);
timerId = timeSetEvent(200, 10, timerRef, UIntPtr.Zero, TIME_KILL_SYNCHRONOUS | TIME_PERIODIC);
即使延迟200毫秒,它也无法正常工作。
private void CallbackFunction(uint id, uint msg, UIntPtr userCtx, UIntPtr uIntPtr, UIntPtr intPtr)
{
// Even if this is empty, it will fail
}
我要么得到NullReferenceException(大多数时候),要么得到AccessViolationException(偶尔)。 我怀疑两者都来自同一个问题。
有趣的是,我在另一个类中具有完全相同的结构,并且可以正常工作。 我复制了该课程,然后在这里……没有。 我得到这个错误。
我不明白为什么它不起作用(在其他班级却不起作用)以及如何解决它。
PD:timerId返回一个不同于0的整数。如果我注释TimerId = TimeSetEvent
...,则我不知道该null出现在frmo的TimerId = TimeSetEvent
。代码不会失败。
经过几天与我的同事一起审查越来越多的代码,我们发现了问题。 不得不说这个问题没有足够的信息来解决,但是我们不知道。 这是一个非常复杂的程序,我们无法想象我们需要其他类的代码。
上面的代码在Class B
。 这是从Class A
调用Class A
。 事实证明, Class A
偶尔会被破坏,并且当TimeSetEvent
故障(不受管理)时,它会继续工作。 因此,当它尝试查找回调函数时,它与Class B
所有内容一起被放置了,并给出了null引用异常 。
解决方案是在Class B
实现一个方法 ,该方法在删除Class A
之前终止计时器。 然后,可以安全地删除Class A
Class B
不会使应用程序崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.