0
10 초마다 주전산기 코드에 타이머가 설정되었습니다. timer_Elapsed 이벤트에서 참조되는 코드 중 일부는 다소 CPU 사용량이 많기 때문에 await Task.Run(() =>
안에 배치했지만 경과 된 이벤트가 실행될 때마다 UI 스레드가 잠깐 멈춰 계속됩니다. 이것이 UI를 막는 이유는 무엇입니까? 코드 :내 비동기 타이머가 UI 스레드를 차단하는 이유는 무엇입니까?
async void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
await Task.Run(() =>
{
//Update default status bar text routinely
try
{
if (ChecEnabled())
{
this.Dispatcher.Invoke(() =>
{
StatusText.Text = String.Format("Status: Enabled. Watching for changes…");
});
}
else
{
this.Dispatcher.Invoke(() =>
{
StatusText.Text = String.Format("Status: Disabled");
});
}
}
catch (ObjectDisposedException)
{
//Window closed and disposed timer on different thread
}
//System Checks
UpdateSystemReadyStatus();
});
}
'ChecEnabled()'는 CPU를 많이 사용합니까? 이 코드를 게시 할 수 있습니까? 'UpdateSystemReadyStatus'를 보여주는 것도 좋을 것입니다. – Enigmativity
그냥 맑게하십시오 - 문제의 원인이되는 질문에 지금까지 표시된 코드에는 아무것도 없습니다. 우리는 당신에게 좋은 대답을 줄 수 있도록 완전한 코드를 보여줄 필요가 있습니다. – Enigmativity
Timer.Elapsed 핸들러에서 Task를 시작하는 것은 의미가 없습니다. Timer는 이미 백그라운드 스레드에서 실행 중입니다. – Clemens