0

我在我的应用程序的很多地方都使用此代码,我知道另一种方法是使用计时器,但这意味着我必须添加大约 20 个。问题是,如果它正在运行并且我关闭应用程序它挂起..有没有一种替代方法可以使用这样的功能,但使用一个计时器?

Public Sub Delay_App(ByVal DelayInMilliseconds As Integer)
    Dim ts As TimeSpan
    Dim targetTime As DateTime = DateTime.Now.AddMilliseconds(DelayInMilliseconds)
    Do
        ts = targetTime.Subtract(DateTime.Now) 
        Application.DoEvents() 
        System.Threading.Thread.Sleep(50) 
    Loop While (ts.TotalSeconds > 0) AndAlso Application.OpenForms.Count > 0
End Sub
4

1 回答 1

2

如前所述,如果您必须在很多地方这样做,这并不是一个好的设计。但是,如果不知道您想要实现什么,就无法真正提供更好的解决方案。同时我会给你一个解决你的问题的方法:

添加一个表示您的应用程序正在关闭的全局变量。

Public AppClosing as Boolean

当您的应用程序关闭时将此设置为 True:

Public Event Form_Closing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    AppClosing = True
End Sub

然后在您的延迟中检查此标志的状态:

Public Sub Delay_App(ByVal DelayInMilliseconds As Integer)
    Dim ts As TimeSpan
    Dim targetTime As DateTime = DateTime.Now.AddMilliseconds(DelayInMilliseconds)
    Do
        ts = targetTime.Subtract(DateTime.Now) 
        Application.DoEvents() 
        For i as Integer = 1 to 50
             System.Threading.Thread.Sleep(1)
             If AppClosing Then Exit Sub 'Application is closing so don't wait for the time
        Next
    Loop While (ts.TotalSeconds > 0) AndAlso Application.OpenForms.Count > 0
End Sub
于 2013-10-31T09:13:42.570 回答