배경 작업자를 사용하여 별도의 스레드를 실행하고 있지만 RunWorkerAssync()
호출 후 내 프로그램이 중단 된 것처럼 보입니다.RunWorkerAssync에서 백그라운드 작업자 중지
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = false;
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(bw_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
worker.RunWorkerAsync();
console.writeline("I'm Done!");
그리고 여기 내 bw_DoWork
기능입니다 : 내가 모든 것을 설정하는 경우 여기에
입니다
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
그리고 내 bw_RunWorkerCompleted
및 bw_ProgressChanged
:
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
}
else if (!(e.Error == null))
{
}
else
{
}
}
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
오전 데 문제 그게 충분히 틀림 없어, 나는 콘솔 출력을 5 초까지 얻지 못한다. 실행 후 onds. 절전 모드를 더 크게/더 짧은 시간으로 변경하면 콘솔 출력 대기가 적절하게 조정됩니다.
프로그램이 계속 실행되는 동안 다른 작업을 수행 할 수 있도록 백그라운드 작업자를 사용하는 것이 아닌가요? 또는 나는 무엇인가 놓치고 있냐?
감사합니다.
나는 많은 양의 데이터를 검색하는 동안 얼어에서 응용 프로그램을 방지하기 위해 꽤 자주 배경 작업자 스레드를 사용하고 평범한 밖으로 보이는 당신이 게시 한 코드에 아무것도 없습니다. 여기에 포함 된 내용으로는 이것이 작동해서는 안되는 이유가 없습니다. 'bw_ProgressChanged' 및'bw_RunWorkerCompleted' 이벤트에는 무엇이 있습니까? 'console.writeline'이 작동하지 않기 때문에 이것은 실제 코드가 될 수 없습니다 ... 더 많은 작업 코드를 게시 할 수 있습니까? –
나는 오늘의 나머지 시간 동안 사무실에서 떨어져있다. 내일 아침에 게시 하겠지만,'bw_ProgressChanged'와'bw_RunWorkerCompleted' 함수는 비어 있다고 확신합니다. – hemlocker
이 코드는 컴파일 할 수 없으므로 실제 코드는보고 있지 않습니다. 아무도 가짜 코드로 문제를 재현하기를 기대하는 것은 무의미합니다. 아무도 할 수 없습니다. –