2013-10-31 137 views
1

我在我的應用程序中的很多地方使用此代碼,我知道一個替代方案是使用計時器,但這意味着我將不得不添加其中約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

使用'等待Task.Delay'如果vb.Net 11.0 –

+3

是的,[非常壞主意](http://stackoverflow.com/a/5183623/17034)。爲什麼你需要在很多地方推遲你的代碼執行?這是一個XY問題,你必須*記錄X以得到一個體面的答案。 –

+0

這是什麼意思? – XK8ER

回答

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