2010-05-10 15 views
25

C# uygulamasının birkaç arka plan işçisi var. Bazen bir arka plan işçisi diğerini ateşleyecektir. İlk arka plan çalışanı tamamlandığında ve RunWorkerCompleted olayı tetiklendiğinde, bu olay hangi yangında, UI veya RunWorkerAsync'un çağrıldığı ilk arka plan çalışanı olarak adlandırılır? Microsoft Visual C# 2008 Express Edition kullanıyorum. Sahip olabileceğiniz herhangi bir düşünce ya da öneri takdir edilecektir. Teşekkürler.BackgroundWorker RunWorkerCompleted Event

cevap

57

UI dizisinden BackgroundWorker oluşturulduysa, kullanıcı arabiriminde RunWorkerCompleted olayı da yükseltilir.

Bir arka plan iş parçacığından oluşturulmuşsa, olay tanımsız bir arka plan iş parçacığında (özel bir SynchronizationContext özel olarak kullanmadığınız sürece aynı iş parçacığına değil) yükseltilir.

İlginçtir, MSDN'de bu kadar iyi belgelenmiş gibi görünmüyor. Ben bulabildim iyi referans here oldu:

uygulamanızda çoklu uygulamak için tercih edilen bir yol BackgroundWorker bileşenini kullanmaktır. BackgroundWorker bileşeni, çoklu iş parçacığı için olay odaklı bir model kullanır. Arka plan iş parçacığı, DoWork olay işleyicinizi çalıştırır ve denetimlerinizi oluşturan iş parçacığı, ProgressChanged ve RunWorkerCompleted olay işleyicilerinizi çalıştırır. Denetimlerinizi ProgressChanged ve RunWorkerCompleted olay işleyicilerinizden arayabilirsiniz.

+0

Bu denetimin başlatıldığı yer burası olur mu? Tüm arka plan işçilerim varsayılan InitializeComponent() 'işlevindeki UI iş parçacığından başlatılır (muhtemelen). –

+0

@Jim: Evet, orijinalde biraz zayıf ifade; aslında olayları alacak olan BackgroundWorker'ı yaratan iş parçacığıdır ve aynı iş parçacığından “RunWorkerAsync” i çağırmalısınız. Akıl sağlığı amaçları için, bu genellikle UI iş parçacığı olmalıdır. – Aaronaught

+8

Bu doğru değil. UI iş parçacığı BGW örneğini oluşturduysa, yalnızca UI iş parçacığında yükseltilir. Bir iş parçacığı BGW'yi oluşturduysa, o zaman rasgele bir threadpool iş parçacığı üzerinde yükseltilir. –

İlgili konular