【问题标题】:Debugging keeps going to a timer1_tick event in a closed form调试继续以封闭形式进入 timer1_tick 事件
【发布时间】:2018-01-16 23:48:27
【问题描述】:

我正在使用父表单将我的其他表单显示为 MdiChild 表单,如下所示:

 If ActiveMdiChild IsNot Form4 Then
            ActiveMdiChild.Close()
            Form4.MdiParent = Me
            Form4.Dock = DockStyle.Fill
            Form4.AutoScroll = False
            Form4.Show()
 End If

我的一个表单(TimerForm)有一个计时器,但是当我在另一个表单(Form4)中放置一个断点并按照代码进行调试完成之前,它会转到关闭的 TimerForm 中的 timer1_event。

我在 TimerForm 上试过这个:

Private Sub TimerForm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Timer1.Enabled = False
    Timer1.Stop()
    Timer1.Dispose()
End Sub

我也尝试了ActiveMdiChild.Dispose(),但没有成功。

表单关闭后如何阻止定时器触发? 谢谢。

【问题讨论】:

  • 您可以从使用显式表单实例开始。表单是类,因此创建了它们的实例frm = New Form4()
  • 谢谢,我用它来显示两个表单,但计时器事件仍在触发。
  • 这只是线程调试器计时问题吗?您是否可以使用日志记录而不是调试来测试一次,以查看计时器在关闭后是否仍在触发而没有附加调试器?
  • 很奇怪,也许你在代码的某个地方再次初始化了计时器?
  • 这个c#但我相信你可以稍微理解代码并搜索一下来实现它。查看最后一个答案,否则您可能有第一个答案的原因。 stackoverflow.com/questions/1526598/…

标签: vb.net winforms timer


【解决方案1】:

谢谢大家。

我通过编程添加 Timer1_Tick 事件解决了我的问题:

Private Sub TimerForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load    
    AddHandler Timer1.Tick, AddressOf Timer1_Tick
    Timer1.Start()
End Sub

并删除 FormClosing 上的事件:

   Private Sub TimerForm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Timer1.Stop()
    Timer1.Enabled = False
    Timer1.Dispose()
    RemoveHandler Timer1.Tick, AddressOf Timer1_Tick
End Sub

【讨论】:

  • 除非您以编程方式添加计时器,否则您不必添加处理程序。它是与设计器一起添加的。但是,如果您确实以编程方式添加它,那么是的,很明显您需要添加处理程序。您可能在其他地方有错误,但如果它有效,那就是重要的
  • 是的,我正在以编程方式添加它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多