延迟申请

时间:2013-10-31 08:45:01

标签: .net vb.net

我在我的应用程序中的很多地方使用此代码,我知道另一种方法是使用计时器,但这意味着我必须添加其中的大约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

1 个答案:

答案 0 :(得分: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