But*_*ers 2 c# user-interface multithreading backgroundworker
这是我的代码.
BackgroundWorker exportWorker = new BackgroundWorker();
private void btnOK_Click(object sender, RoutedEventArgs e)
{
exportWorker.DoWork += new DoWorkEventHandler(ExportWorkerDoWork);
exportWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(ExportWorkerRunWorkerCompleted);
exportWorker.RunWorkerAsync();
}
void ExportWorkerDoWork(object sender, DoWorkEventArgs e)
{
MethodToPerformInThisThread();
**Dispatcher.Invoke(new Action(() => {MethodofAnotherThreadThatChangesUIStuff();}**
}
void ExportWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
btnOK_Click第一次单击OK按钮()时,它继续运行并运行一切就好了.MethodofAnotherThreadThatChangesUIStuff();会连续两次调用.MethodofAnotherThreadThatChangesUIStuff();将连续三次调用.我想要MethodofAnotherThreadThatChangesUIStuff();只调用一次,无论它是哪一次点击.我的意思是,通常这就是事情的运作方式.
我在这里错过了什么?
任何帮助将非常感激.
由于每次按下按钮时都声明背景在Click处理程序之外工作,因此再次添加事件处理程序.这就是为什么第二次调用你的方法两次,第三次调用它三次...
要解决此问题,请在click方法之外添加事件处理程序(例如在构造函数中),并在click方法中保留RunAsync()调用.