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