C#:连续两次调用方法

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按钮()时,它继续运行并运行一切就好了.
  • 现在,如果我在代码完成执行后第二次单击OK按钮,则粗体中的代码会运行两次,这意味着该方法MethodofAnotherThreadThatChangesUIStuff();会连续两次调用.
  • 再次,如果我第三次单击"确定"按钮, MethodofAnotherThreadThatChangesUIStuff();将连续三次调用.
  • 等等.

我想要MethodofAnotherThreadThatChangesUIStuff();只调用一次,无论它是哪一次点击.我的意思是,通常这就是事情的运作方式.

我在这里错过了什么?

任何帮助将非常感激.

Zdr*_*nev 9

由于每次按下按钮时都声明背景在Click处理程序之外工作,因此再次添加事件处理程序.这就是为什么第二次调用你的方法两次,第三次调用它三次...

要解决此问题,请在click方法之外添加事件处理程序(例如在构造函数中),并在click方法中保留RunAsync()调用.