C# EventHandler能否在运行时因并发事故而被删除
计时器每毫秒触发一次,并使dataobject控制自身,如果发生更改,则会触发事件。(C# EventHandler能否在运行时因并发事故而被删除,c#,events,testing,timer,nunit,C#,Events,Testing,Timer,Nunit,计时器每毫秒触发一次,并使dataobject控制自身,如果发生更改,则会触发事件。(NowTimeCapsule:TimeCapsule:ACapsule:ICapsule) 从属对象(TimeCapsule:ACapsule:ICapsule)已为该事件注册并在必要时更新自身。如果进行了更改,则会触发一个事件 表单将委托添加到从属对象更改事件中,如果该事件触发,委托将更新文本框 由于某种原因,这条链出现了故障——我对各个部分进行了单元测试,我知道(通过抛出messageboxed)它在故障之
NowTimeCapsule:TimeCapsule:ACapsule:ICapsule
)
从属对象(TimeCapsule:ACapsule:ICapsule
)已为该事件注册并在必要时更新自身。如果进行了更改,则会触发一个事件
表单将委托添加到从属对象更改事件中,如果该事件触发,委托将更新文本框
由于某种原因,这条链出现了故障——我对各个部分进行了单元测试,我知道(通过抛出messageboxed)它在故障之前运行了一段时间
如何使用NUnit测试此链。
哪里有合理的角落可以集中测试
编辑:
找到了。计时器已包装以捕获异常,调用因异常而失败。触发器由包装器处理。我移除了包装器并修复了调用,所有测试都是绿色的。一旦我知道它是稳定的,我就会写一个答案。引发事件的更新程序有一个bug并崩溃了
事件工作正常。我几乎不怀疑事件处理程序会被删除。是否有任何eventhandlers方法创建了一个新的对象,该对象应该被分配一个事件?如果要创建新对象,事件处理程序仍然指向旧对象。如果是这样,使用“-=”取消分配旧的一个,并将其分配给新对象“+=”你能提供一个简单的例子来重现你的问题吗?我正在研究它,但到目前为止没有一个测试失败-因此我还没有重现。我现在怀疑是我的文本框invoke.Nah。首先确保事件始终处于激发状态。然后,如果您怀疑出于某种原因,您的某个消费者没有订阅该活动。在激发事件的方法中添加一些日志代码,以列出当前订阅服务器。通常这一刻是一个安静的时刻。