0

私は自分のアプリケーションの多くの場所でこのコードを使用しており、代わりにタイマーを使用していることは知っていますが、それは約 20 個のタイマーを追加する必要があることを意味します..これの問題は、これが実行されていてアプリを閉じる場合ですハングします..このような関数を使用する代わりに、1つのタイマーを使用する代替手段はありますか?

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 に答える