这可能是由于在主线程之外设置Button.Enabled属性引起的。 为了正确地在后台线程中禁用按钮,可以使用BackgroundWorker的ProgressChanged事件来调用Control类的Invoke方法。 这将把方法调用发送到创建控件的主线程,从而解决了在后台线程中操作控件的问题。
以下是如何实现的示例代码:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { // long-running work here ReportProgress(0); }
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { // update UI controls here using Invoke button1.Enabled = false; }
private void button1_Click(object sender, EventArgs e) { // start the background worker backgroundWorker1.RunWorkerAsync(); }