代码之家  ›  专栏  ›  技术社区  ›  user472875

事件处理程序有时不启动C#

  •  0
  • user472875  · 技术社区  · 14 年前

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

    我知道这是一个模糊的问题,但希望有人遇到类似的事情。

    谢谢,

    颗粒物

    编辑:我对这个问题做了进一步的研究,我注意到这确实是一个线程问题。负责此事件的线程是处理我的程序的网络部分的线程,它会立即阻塞,因为它正在等待网络上程序的另一个实例的输入。我该怎么办?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Mark Brackett    14 年前

    我对这个问题做了进一步的研究,我注意到这确实是一个线程问题。负责此事件的线程是处理我的程序的网络部分的线程,它会立即阻塞,因为它正在等待网络上程序的另一个实例的输入。我该怎么办?

    听起来你有一个 System.Windows.Timers.Timer 用一个 SynchronizingObject 设置为用户界面控件,或正在使用(b)a System.Windows.Forms.Timer . 然后,使用网络读取阻止事件触发来阻止UI线程。

    您有两个选项,要么使用不同的线程进行网络读取,要么用于计时器事件。如果使用System.windows.Timers.Timer,则不要传递 同步对象 ,它将引发线程池线程上的事件。或者, async the network read .

        2
  •  0
  •   Jon Skeet    14 年前

    它是什么样的计时器,您是否保留对它的引用?有没有可能计时器在着火之前就被垃圾回收了?文件里有个警告 System.Windows.Timers.Timer .

    推荐文章