关于Button设置Enabled = false后鼠标响应的问题!

seahi 2016-06-30 10:56:31
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
textBox1.Text += "在执行中········";
//process something
textBox1.Text += "执行完毕!";
button1.Enabled= true;
}

请看以上代码,我希望达到的效果是,用户点击按钮后,按钮变灰,进程处理完毕后才可以再次点击按钮,在按钮为灰色期间的所有点击动作无效。
但实际的效果是,我在按钮上不停的点,虽然第一次点击后按钮是变灰了。但是一旦按钮变回以后还是会继续响应按钮变灰后的点击动作,因为按钮变灰后的点击动作被缓存起来了,按钮变回以后继续响应缓存的点击动作。如果我连续在按钮上点几十下,界面得几分钟才能缓过来。
请问这个问题该如何解决。
因为process something执行的是界面绘图操作,所以无法用异步方式处理。
...全文
663 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
seahi 2016-06-30
  • 打赏
  • 举报
回复
引用 2 楼 Libby1984 的回复:
引文你的process something是使用另外一个进程在处理,所以当你调用进程的Start方法后,你的主线程就会继续开始执行()不会被阻塞住),后面的 textBox1.Text += "执行完毕!";和button1.Enabled= true;也会执行。所以很有可能你的处理线程一开始你的按钮就Eable了,只是界面显示稍微慢了点。你应该在确认处理线程执行完毕之后再回复按钮为可用状态。
没有使用另外的线程,就调用了一个方法,这个方法执行完大约需要3秒,界面上也能明显看到按钮灰了。 而且后面的点击动作都在按钮是灰色的时候点的。
巴士上的邂逅 2016-06-30
  • 打赏
  • 举报
回复
你应该在process something完成之后通知textBox1.Text += "执行完毕!";button1.Enabled= true;
wanghui0380 2016-06-30
  • 打赏
  • 举报
回复
awit task
  • 打赏
  • 举报
回复
引文你的process something是使用另外一个进程在处理,所以当你调用进程的Start方法后,你的主线程就会继续开始执行()不会被阻塞住),后面的 textBox1.Text += "执行完毕!";和button1.Enabled= true;也会执行。所以很有可能你的处理线程一开始你的按钮就Eable了,只是界面显示稍微慢了点。你应该在确认处理线程执行完毕之后再回复按钮为可用状态。
  • 打赏
  • 举报
回复 2
        int num = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            Thread.Sleep(2000);
            num++;
            this.textBox1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff   "+ num);
            //加上下面这句,没这句你的界面不会重回,你按钮的Enable设置没能更新到界面上
            //也就是你以为你的按钮被禁用了,其实在你整段代码运行结束之前都不会被禁用
            Application.DoEvents(); 
            this.button1.Enabled = true;
        }
巴士上的邂逅 2016-06-30
  • 打赏
  • 举报
回复
引用
没有使用另外的线程,就调用了一个方法,这个方法执行完大约需要3秒,界面上也能明显看到按钮灰了。 而且后面的点击动作都在按钮是灰色的时候点的。
你这样不会假死吗?
seahi 2016-06-30
  • 打赏
  • 举报
回复
一楼正解,加 Application.DoEvents(); 果然可以。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧