조금 문제가 생겼습니다. 매번 GUI의 스레드로 숫자를 보내거나 반환해야하는 루프를 실행하는 두 개의 스레드가 있습니다. 이를 위해 BackGroundWorker 및 ReportProgress을 사용합니다. 내가 실행하는 BackgroundWorker에 (DoWork) 어떤 0에서 계산하는 간단한 루프를gui 동결없는 간단한 작업
:
하자가 그런 말을. 루프에 대한 모든 항목은 카운터 값을 인쇄 할 GUI 스레드에 ReportProgress 이벤트를 사용하여 카운터를 보냅니다.
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int count = 0;
BackgroundWorker Worker = (BackgroundWorker)sender;
while (count < 10000000)
{
Worker.ReportProgress(count);
count++;
}
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
txt.Text = e.ProgressPercentage.ToString();
}
이제는이 기능이 GUI를 고정시킵니다.
ReportProgress가 BackGroundWorker을 만든 스레드에서 ProgressChange 처리기를 호출한다는 것을 알고 있습니다. 그래서 루프가 너무 빨리 실행되어 GUI의 스레드가 필요에 따라 값을 인쇄하지 못하고 있다고 생각합니다.
무엇 GUI를 멈추지 않고 그런 작업을 수행 할 수 있습니까?
Dispatcher에 대해 들었지만 그 내용이 무엇인지 잘 모르겠습니다.
GUI가 맞습니까? GUID는 내가 아는 한 완전히 다른 무언가이기 때문에 :-) 또한 WinForms를 사용하고 있습니까? 아니면 WPF를 가정 할 수 있습니까? – Daneo
'GUI' = 그래픽 사용자 인터페이스; GUID = Globally Unique IDentifier ... 그냥 FYI;) –