我有一个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按钮并显示“正在处理...”。除按钮外,其他所有工作怎么办?我该如何解决?