매 시간마다 작업을 실행하기 위해 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);
}
}
}
런타임에서 _some_ 예외를 throw해야합니다. 모든 예외를 던지도록 내버려두고 무엇을하는지 말해주세요. – MoonKnight
@Killercam 나는 남자를 모르지만 나는 아무것도 보지 않습니다 ... 모든 예외를 가능케하는이 옵션은 어디에 있습니까? – Hershizer33
VS2010을 사용하는 경우 처음에는 '디버그'> '예외 ...'메뉴에서 자동 예외 기능을 활성화 할 수 있습니다. 그런 다음 모든 CLR 예외를 확인하고 코드를 다시 실행하십시오. 관련성이 있다고 생각되는 추가 예외를 추가하십시오. 이것이 작동하지 않으면 관리되지 않는 코드 예외 일 수 있습니다. 이번에는 프로젝트 속성으로 이동 한 다음 '디버그'탭으로 이동하십시오. '관리되지 않는 코드 디버깅 사용'을 선택하십시오. 그런 다음 표시되는 내용을 알려주십시오.이 시점에서 나는 당신을 더 도울 수 있습니다 (또는하지 않을 수도 있습니다). – MoonKnight