18
จะรอให้ BackgroundWorker ยกเลิกได้อย่างไร?
พิจารณาวิธีการสมมุติของวัตถุที่ทำสิ่งต่างๆให้คุณ: public class DoesStuff { BackgroundWorker _worker = new BackgroundWorker(); ... public void CancelDoingStuff() { _worker.CancelAsync(); //todo: Figure out a way to wait for BackgroundWorker to be cancelled. } } จะรอให้ BackgroundWorker ทำได้อย่างไร? ในอดีตผู้คนได้พยายาม: while (_worker.IsBusy) { Sleep(100); } แต่การหยุดชะงักนี้เนื่องจากIsBusyไม่ได้รับการล้างจนกว่าRunWorkerCompletedจะมีการจัดการเหตุการณ์และเหตุการณ์นั้นจะไม่สามารถจัดการได้จนกว่าแอปพลิเคชันจะไม่ได้ใช้งาน แอปพลิเคชันจะไม่ทำงานจนกว่าผู้ปฏิบัติงานจะเสร็จสิ้น (นอกจากนี้ยังเป็นห่วงที่วุ่นวาย - น่าขยะแขยง) คนอื่น ๆ ได้เพิ่มการแยกที่แนะนำไว้ใน: while (_worker.IsBusy) { …