คำถามติดแท็ก backgroundworker

13
เธรดการโทรไม่สามารถเข้าถึงวัตถุนี้ได้เนื่องจากเธรดอื่นเป็นเจ้าของ
รหัสของฉันเป็นดังนี้ public CountryStandards() { InitializeComponent(); try { FillPageControls(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error); } } /// <summary> /// Fills the page controls. /// </summary> private void FillPageControls() { popUpProgressBar.IsOpen = true; lblProgress.Content = "Loading. Please wait..."; progress.IsIndeterminate = true; worker = new BackgroundWorker(); worker.DoWork += …

4
วิธีใช้ WPF Background Worker
ในแอปพลิเคชันของฉันฉันต้องดำเนินการขั้นตอนการกำหนดค่าเริ่มต้นใช้เวลาดำเนินการประมาณ 7-8 วินาทีในการที่ UI ของฉันไม่ตอบสนอง ในการแก้ไขปัญหานี้ฉันทำการเริ่มต้นในเธรดแยกต่างหาก public void Initialization() { Thread initThread = new Thread(new ThreadStart(InitializationThread)); initThread.Start(); } public void InitializationThread() { outputMessage("Initializing..."); //DO INITIALIZATION outputMessage("Initialization Complete"); } ฉันได้อ่านบทความเกี่ยวกับBackgroundWorkerและควรอนุญาตให้แอปพลิเคชันของฉันตอบสนองได้อย่างไรโดยไม่ต้องเขียนเธรดเพื่อทำงานที่มีความยาว แต่ฉันไม่เคยประสบความสำเร็จในการพยายามติดตั้งใช้งาน สิ่งนี้ใช้BackgroundWorker?

11
BackgroundWorker vs กระทู้พื้นหลัง
ฉันมีคำถามเกี่ยวกับโวหารเกี่ยวกับการเลือกการใช้เธรดพื้นหลังที่ฉันควรใช้กับแอพพลิเคชั่น windows form ปัจจุบันฉันมีBackgroundWorkerรูปแบบที่มีการ(while(true))วนซ้ำไม่สิ้นสุด ในวงนี้ฉันใช้WaitHandle.WaitAnyเพื่อเก็บกระทู้งีบหลับจนกว่าสิ่งที่น่าสนใจเกิดขึ้น เหตุการณ์หนึ่งที่ฉันจัดการรอเป็นStopThreadเหตุการณ์ "" เพื่อให้ฉันสามารถแยกวง Form.Dispose()เหตุการณ์นี้จะส่งสัญญาณเมื่อจากแทนที่ของฉัน ฉันอ่านที่ไหนสักแห่งที่BackgroundWorkerมีไว้สำหรับการดำเนินการที่คุณไม่ต้องการผูก UI ด้วยและมีจุดสิ้นสุดที่ จำกัด - เช่นการดาวน์โหลดไฟล์หรือประมวลผลรายการตามลำดับ ในกรณีนี้ "สิ้นสุด" ไม่เป็นที่รู้จักและเฉพาะเมื่อปิดหน้าต่าง ดังนั้นฉันควรจะใช้เธรดพื้นหลังแทนการBackgroundWorkerใช้เพื่อวัตถุประสงค์นี้หรือไม่

4
Async / await vs BackgroundWorker
ในไม่กี่วันที่ผ่านมาฉันได้ทดสอบคุณสมบัติใหม่ของ. net 4.5 และ c # 5 ฉันชอบคุณสมบัติใหม่ของ async / await ก่อนหน้านี้ฉันใช้BackgroundWorkerเพื่อจัดการกระบวนการที่ยาวนานขึ้นในพื้นหลังด้วย UI ที่ตอบสนอง คำถามของฉันคือ: หลังจากมีคุณสมบัติใหม่ที่ดีเหล่านี้ฉันควรใช้ async / คอยและเมื่อเป็นBackgroundWorker ? สถานการณ์ทั่วไปสำหรับทั้งคู่คืออะไร

8
กำลังส่งอาร์กิวเมนต์ไปที่ Background Worker หรือไม่
สมมติว่าฉันต้องการส่งพารามิเตอร์ int ไปยังผู้ทำงานเบื้องหลัง, สิ่งนี้จะสำเร็จได้อย่างไร? private void worker_DoWork(object sender, DoWorkEventArgs e) { } ฉันรู้ว่าเมื่อใดที่นี่คือ worker.RunWorkerAsync (); ฉันไม่เข้าใจวิธีการกำหนดใน worker_DoWork ว่าควรใช้พารามิเตอร์ int

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) { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.