Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EventHandler能否在运行时因并发事故而被删除_C#_Events_Testing_Timer_Nunit - Fatal编程技术网

C# EventHandler能否在运行时因并发事故而被删除

C# EventHandler能否在运行时因并发事故而被删除,c#,events,testing,timer,nunit,C#,Events,Testing,Timer,Nunit,计时器每毫秒触发一次,并使dataobject控制自身,如果发生更改,则会触发事件。(NowTimeCapsule:TimeCapsule:ACapsule:ICapsule) 从属对象(TimeCapsule:ACapsule:ICapsule)已为该事件注册并在必要时更新自身。如果进行了更改,则会触发一个事件 表单将委托添加到从属对象更改事件中,如果该事件触发,委托将更新文本框 由于某种原因,这条链出现了故障——我对各个部分进行了单元测试,我知道(通过抛出messageboxed)它在故障之

计时器每毫秒触发一次,并使dataobject控制自身,如果发生更改,则会触发事件。(
NowTimeCapsule:TimeCapsule:ACapsule:ICapsule

从属对象(
TimeCapsule:ACapsule:ICapsule
)已为该事件注册并在必要时更新自身。如果进行了更改,则会触发一个事件

表单将委托添加到从属对象更改事件中,如果该事件触发,委托将更新文本框

由于某种原因,这条链出现了故障——我对各个部分进行了单元测试,我知道(通过抛出messageboxed)它在故障之前运行了一段时间

如何使用NUnit测试此链。 哪里有合理的角落可以集中测试


编辑:


找到了。计时器已包装以捕获异常,调用因异常而失败。触发器由包装器处理。我移除了包装器并修复了调用,所有测试都是绿色的。一旦我知道它是稳定的,我就会写一个答案。

引发事件的更新程序有一个bug并崩溃了


事件工作正常。

我几乎不怀疑事件处理程序会被删除。是否有任何eventhandlers方法创建了一个新的对象,该对象应该被分配一个事件?如果要创建新对象,事件处理程序仍然指向旧对象。如果是这样,使用“-=”取消分配旧的一个,并将其分配给新对象“+=”你能提供一个简单的例子来重现你的问题吗?我正在研究它,但到目前为止没有一个测试失败-因此我还没有重现。我现在怀疑是我的文本框invoke.Nah。首先确保事件始终处于激发状态。然后,如果您怀疑出于某种原因,您的某个消费者没有订阅该活动。在激发事件的方法中添加一些日志代码,以列出当前订阅服务器。通常这一刻是一个安静的时刻。