事件处理程序有时不会触发C#

时间:2010-11-21 23:13:11

标签: c# event-handling

我正在开发一个带有一些事件处理代码的项目。基本上,我创建一个计时器,然后在我自己的事件处理程序上添加超时事件。我通过在那里放置一个断点进行双重检查,是的,事件处理程序确实被添加到该事件中(是的,我也启动了计时器)。但是,出于某种原因,有时事件处理程序会触发,而有时则不会触发。我正在使用多线程,并认为它可能与某种程度上有关,但我不确定。

我知道这是一个模糊的问题,但希望有人碰到类似的东西。

谢谢,

PM

编辑:我已经进一步研究了这个问题,我注意到这确实是一个线程问题。负责此事件的线程是处理程序的网络部分的线程,它会在之后立即阻塞,因为它正在等待来自网络上另一个程序实例的输入。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

  

我已经进一步研究了这个问题,我注意到这确实是一个线程问题。负责此事件的线程是处理程序的网络部分的线程,它会在之后立即阻塞,因为它正在等待来自网络上另一个程序实例的输入。我该如何解决这个问题?

听起来像(a)System.Windows.Timers.Timer设置了SynchronizingObject设置为UI控件,或者正在使用(b)System.Windows.Forms.Timer。然后,使用网络读取来阻止UI线程 - 防止事件被触发。

您有2个选项,可以使用不同的线程进行网络读取或使用计时器事件。如果您使用System.windows.Timers.Timer,则不要传递SynchronizingObject,它将在ThreadPool线程上引发事件。或者,async the network read

答案 1 :(得分:0)

它是什么类型的计时器,你是否保留对它的引用?计时器是否可能因火灾而被垃圾收集?在System.Windows.Timers.Timer的文档中有关于此的警告。