Dlaczego BackgroundWorker zawsze jest zajęty?
Zrozumiałem coś dziwnego w moim pracowniku w tle w mojej aplikacji WPF.
To, co staram się teraz osiągnąć, to czekać, aż BW zakończy, aby uruchomić kolejny wątek.
Sprawdź następujący kod:
if (bw.IsBusy)
{
bw.CancelAsync();
System.Threading.ThreadStart WaitThread =
new System.Threading.ThreadStart(delegate() {
while (bw.IsBusy)
{
System.Threading.Thread.Sleep(100);
}
bw.RunWorkerAsync();
});
System.Windows.Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
WaitThread); // if I remove this line, bw fires RunWorkerAsyncEvent
}
else
{
bw.RunWorkerAsync();
}
Pamiętaj, że dodałem Dispatcher.Invoke, aby poczekać, aż bw nie będzie zajęty, ale WSZYSTKIE CZAS JEST ZAJĘTE, jeśli go wywołam i nigdy nie odpalęRunWorkerAsyncCompleted
zdarzenie. Chociaż, jeśli usunę tę linię, FIRES wydarzenie i to naprawdę dziwne.
Jak mogę poczekać, aż bw skończy?