【发布时间】:2015-05-06 05:16:42
【问题描述】:
我有以下 wpf 程序,我想做的是 btnAnalyzer_click 方法等待 DoWork 和 RunWorkerCompleted 方法完成。所以我使用了 AutoResetEvent,但现在 bwAnalyze_click 方法(#4 行)在 DoWork 之后运行,然后是 WorkerCompleted 方法(行顺序 - #1 #2 #4 & #3)。但我希望他们按照#1 #2 #3 & #4 的顺序执行。有什么解决方案或建议吗?
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
}
}
【问题讨论】:
标签: c# wpf multithreading backgroundworker