2012-10-30 3 views
1

매 시간마다 작업을 실행하기 위해 Threading.Timer를 사용하고 있지만, 타이머가 틱하면 틱으로 실행될 코드를 처리 할 때 항상 응용 프로그램이 중단됩니다. 예외 나 경고없이 충돌이 발생합니다. 전체를 try/catch에 넣어 두었더라도 마찬가지입니다. 아주 이상한. 아래 내 설정 및 모든 도움을 주시면 감사하겠습니다! TextBox GrepCmdTextBox에 액세스하려고하면 충돌이 발생하지만 다른 스레드에서 읽는 것이 괜찮 았을뿐입니다.Threading.Timer 내 Winform 응용 프로그램이 충돌합니까?

설정 타이머 :

var timeOfDay = DateTime.Now.TimeOfDay; 
var nextHour = TimeSpan.FromHours(Math.Ceiling(timeOfDay.TotalHours)); 
var delta = (nextHour - timeOfDay).TotalMilliseconds; 
System.Threading.Timer NextHourTimer = new System.Threading.Timer(new System.Threading.TimerCallback(NextHourTimer_Tick), null, (long)delta, (long)TimeSpan.FromHours(1).TotalMilliseconds); 

틱 이벤트 :

private void NextHourTimer_Tick(object sender) 
    { 
     // If thread is not null and is busy, cancel and restart 
     if (MonitoringThread != null) 
     { 
      if (MonitoringThread.TailThread.IsBusy) 
      { 
       MonitoringThread.TailThread.CancelAsync(); 
       System.Threading.Thread.Sleep(50); 

       // Get grep command, if specified 
       string optionalGrep = String.Empty; 
       if (GrepCmdTextBox.Text.StartsWith("grep") || GrepCmdTextBox.Text.StartsWith("egrep")) 
        optionalGrep = " | " + GrepCmdTextBox.Text; 

       MonitoringThread.TailThread.RunWorkerAsync(optionalGrep); 
      } 
     } 
    } 
+0

런타임에서 _some_ 예외를 throw해야합니다. 모든 예외를 던지도록 내버려두고 무엇을하는지 말해주세요. – MoonKnight

+0

@Killercam 나는 남자를 모르지만 나는 아무것도 보지 않습니다 ... 모든 예외를 가능케하는이 옵션은 어디에 있습니까? – Hershizer33

+0

VS2010을 사용하는 경우 처음에는 '디버그'> '예외 ...'메뉴에서 자동 예외 기능을 활성화 할 수 있습니다. 그런 다음 모든 CLR 예외를 확인하고 코드를 다시 실행하십시오. 관련성이 있다고 생각되는 추가 예외를 추가하십시오. 이것이 작동하지 않으면 관리되지 않는 코드 예외 일 수 있습니다. 이번에는 프로젝트 속성으로 이동 한 다음 '디버그'탭으로 이동하십시오. '관리되지 않는 코드 디버깅 사용'을 선택하십시오. 그런 다음 표시되는 내용을 알려주십시오.이 시점에서 나는 당신을 더 도울 수 있습니다 (또는하지 않을 수도 있습니다). – MoonKnight

답변

2

시간이 걸릴 수 있습니다 비동기 처리를 취소, 배경 스레드 (DoWork에서 돌아 오는, '마무리'로해야합니다) RunWorkerCompleted 이벤트 (있는 경우)를 실행할 수있는 기회를 기다리고 있습니다.

취소하는 대신,이 경우에는 Dispose()을 취소하고 새로운 BGW를 만드는 것이 더 낫습니다. 'cheap-as-chips'이기 때문입니다.

이 정보가 도움이되기를 바랍니다.

관련 문제