【发布时间】:2019-01-27 23:24:59
【问题描述】:
private void button_uploadToPI_Click(object sender, RoutedEventArgs e)
{
this.newFilePath = this.textbox_input_filePath.Text;
this.label_status.Content = "";
if (bgWorker.IsBusy != true)
{
bgWorker.RunWorkerAsync();
}
}
这是我的点击事件。
public MainWindow()
{
InitializeComponent();
this.progressBar.Minimum = 0;
this.progressBar.Maximum = 100;
this.bgWorker = new BackgroundWorker();
this.bgWorker.WorkerReportsProgress = true;
this.bgWorker.WorkerSupportsCancellation = true;
reader.IsOpen = false;
this.bgWorker.DoWork += bgWorker_DoWork;
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
}
主窗口方法。
public partial class MainWindow : Window
{
private BackgroundWorker bgWorker;
bgWorker 在这里初始化。
void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.progressBar.Value = 0;
this.label_progressPercentage.Content = "0%";
reportTextBox.ScrollToEnd();
}
RunWork完整代码
主要问题是,如果我运行该应用程序一次,它会按预期工作。如果我然后再次单击,它将执行该方法两次,如果我再次单击它,它将执行该方法 3 次。每次新点击都会增加。
谁能看到这里的主要问题?
【问题讨论】:
-
我没有看到发布的代码有任何问题。您有机会发布 BackgroundWorker 的事件处理程序吗?
-
我为我的 runworkcomplete 方法添加了代码。
-
“我再次单击它”是指单击
button_uploadToPI还是再次显示表单本身? -
听起来你多次订阅按钮点击事件而不取消订阅。
-
在每次点击时创建一个新的 worker 实例并将其放入 bgWorker 字段中。当工作人员完成时,使该字段无效。检查该字段是否为空,而不是检查 IsBusy 属性。 ...并且根本不要使用 BackgroundWorker。
标签: c# backgroundworker