BackgroundWorker
을 사용하여 Form
이 스레드 된 작은 응용 프로그램을 만들었으며 양식을 닫을 때 Program
클래스의 QuitApplication
함수를 호출하고 있습니다. CancelAsync가 작동하고 있습니까?
DoWork
void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Program.instance.SetStatus("Closing down...", 0);
Program.QuitApplication();
}
그래서 내가 원하는 것은 그 모든 것을 보장하는 것입니다 :
static void guiThread_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (true)
{
if (worker.CancellationPending == true)
{
e.Cancel = true;
break;
}
if (Program.instance.form != null)
{
Program.instance.form.UpdateStatus(Program.instance.statusText, Program.instance.statusProgress);
}
Thread.Sleep(GUI_THREAD_UPDATE_TIME);
}
}
그리고 난이 방법은 윈도우의 폐쇄에 부착 한 Form1 클래스에
창에서 X를 누르면 종료됩니다. 그러나,if(worker.CancellationPending == true)
결코 안타 ... 왜이 무엇입니까?
QuitApplication은 다음과 같습니다
public static void QuitApplication()
{
Program.instance.guiThread.CancelAsync();
Application.Exit();
}
그리고 그것을 감지하고 차단 할 수있는 기회를 스레드 임은 CancellationPending
속성을 설정하는 것입니다
의 중복 가능성 [.NET :?를 BackgroundWorker에 취소를 기다리는 방법] (http://stackoverflow.com/questions/123661/net-how-to-wait-for-a -backgroundworker-to-cancel) – codingbadger