У меня есть программа wpf, то, что я хочу сделать, это метод btnAnalyzer_click, чтобы подождать до тех пор, пока оба DoWork & RunWorkerCompleted не закончатся. Поэтому я использовал AutoResetEvent, но теперь метод bwAnalyze_click (строка # 4) запускается после DoWork, а затем с помощью метода WorkerCompleted (порядок строк - # 1 # 2 # 4 & # 3). Но я хочу, чтобы они выполнялись в порядке # 1 # 2 # 3 & # 4. Любые решения или предложения?Фоновый работник RunWorkCompleted Событие
public partial class MainWindow : Window
{
private readonly BackgroundWorker bwAnalyzer = new BackgroundWorker();
private AutoResetEvent autoReset;//to signal the end of the BackgroudnWork
public MainWindow()
{
InitializeComponent();
autoReset = new AutoResetEvent(false);
bwAnalyzer.DoWork += new DoWorkEventHandler(DoWork);
bwAnalyzer.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
}
void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("Completed"); #3
autoReset.Set();
}
void DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine("load"); #2
}
private void btnAnalyze_Click(object sender, RoutedEventArgs e)
{
bwAnalyzer.RunWorkerAsync(); #1
autoReset.WaitOne();//when commented working properly
Console.WriteLine("click"); #4
}
}
Да, я понимаю вашу точку зрения, ожидание и использование фонового работника бесполезно. Я редактирую существующую базу кода, поэтому удаление фонового рабочего кажется большим количеством работы. Поэтому я попытался изменить порядок щелчка и завершить при использовании фонового рабочего. – maamaa
Я вижу! Самый простой способ - переместить все после RunWorkerAsync в новый метод и вызвать это в WorkerCompleted() ... Тогда вам гарантировано, что он будет выполняться линейно, не блокируя ничего. Хотя я должен сказать, что немного чувствую, что код нужен для обслуживания :) – Rowbear
@ Rowbear: Если вы редактируете существующий код, почему бы не улучшить дизайн, так как у вас есть шанс? :) ['" Оставьте уборщик кемпинга, чем тот, который вы его нашли. ") (Http://alvinalexander.com/programming/clean-code-quotes-robert-c-martin) –