日期:2014-05-20  浏览次数:20915 次

button控件 Enable属性 在起线程下出现的奇怪问题。请指教!
我的做法是这样的。Button1按钮
private   void   Button1_Click(object   sender,   System.EventArgs   e)
{
Button1.Enabled   =   false;
Thread   tnew   =   new   Thread(new   ThreadStart(SetFormula));
tnew.Start();//起线程计算我的方法
Button1.Enabled   =   true;
}

目的就是点击按钮变成不可用同时计算,计算完成后使按钮变为可用。
我没用线程时可以达到我要的效果,但是用了线程后,一闪一下按钮就又变成可以使用了,请问怎么做才能让我既能用线程同时Enable也能按照我的想法进行执行。

------解决方案--------------------
public void SetFormula()
{
Thread.Sleep(5000); // 模拟执行的过程

Invoke(new EventHandler(DoInvoke)); // 执行完后恢复
}

private void DoInvoke(object sender, EventArgs e)
{
button1.Enabled = true;
}

private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
Thread tnew = new Thread(new ThreadStart(SetFormula));
tnew.Start();//起线程计算我的方法
}