线程运行后,Button不会重新启用

时间:2012-07-12 02:53:46

标签: c# multithreading button

我有一个Thread“thr”,它的委托“updateStuff”设置如下(作为全局变量):

private Thread thr;
private delegate void updateStuff(bool isDone);

如果用户选中一个名为“auto-do-stuff”的框,然后点击“doStuff”按钮:

private void doStuff_Click(object sender, EventArgs e)
{
  doStuff.Enabled = false;
  doStuff.Text = "Processing...";
  auto-do-stuff.Enabled = false;
  wait_pic.Visible = true;

  thr = new Thread(runProgram);
  thr.Start();
}

Wait_pic只是一个GIF动画。然后对于“runProgram”,我有:

private void runProgram()
{
  //do my stuff
  this.Invoke(new updateStuff(this.UpdateIt), new object[] {true});
}

因此,当程序完成时,以bool isDone = true的形式向UpdateIt()发送“完成”信号。这是UpdateIt():

private void UpdateIt(bool isDone)
{
  doStuff.Enabled = true;
  doStuff.Text = "Do Stuff" //the original text before it was pushed
  auto-do-stuff.Enabled = true;
  auto-do-stuff.Checked = false;
  wait_pic.Visible = false;
}

所以基本上如果检查了auto-do-stuff并且用户按下按钮doStuff,它会禁用按钮和复选框,并在后台线程工作时显示动画gif。当该线程完成时,它表示它是,并且按钮和复选框都应该重新启用并且gif应该消失。

出于某种原因,复选框被重新启用并取消选中,并且gif已按预期消失,但仍然禁用了doStuff按钮并显示“正在处理...”。除按钮外,其他所有工作怎么办?我该如何解决?

0 个答案:

没有答案