2013-10-31 3 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

이미 언급했듯이 많은 장소에서이 작업을 수행해야하는 경우 실제로는 좋은 디자인이 아닙니다. 그러나 당신이 달성하기를 원하는 것을 모른 채, 나는 더 나은 해결책이 정말로 제공 될 수 없다. 그 동안 문제 해결 방법을 알려 드리겠습니다 :

응용 프로그램이 종료되었음을 나타내는 전역 변수를 추가하십시오. True로

Public AppClosing as Boolean 

설정이 응용 프로그램이 종료된다

이 지연 그리고
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 
관련 문제