猿问

winform按钮button变为灰色后依然可以执行 click

在winform中的button,点击后先设置enable为false,中间处理其他,最后设置enable为true

但是执行过程中再点击button,依然可以执行click

private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
textBox1.Text += "在执行中········";

//process something


textBox1.Text += "执行完毕!";
button1.Enabled= true;
}

这问题怎么解决


Qyouu
浏览 924回答 2
2回答

肥皂起泡泡

这是因为消息机制引起的问题,如果处理click事件的函数执行时间过长,那么下一次点击的消息会存入消息队列,等到当前click处理函数退出以后,再从消息队列获取此消息执行。你可以使用我提供的代码,多次点击button,你会看到多次的重复执行。解决此问题的办法是尽可能的让click事件处理函数的执行时间缩短,更严谨的做法是自己设置同步事件,忽略无效的点击。

GCT1015

没啥好说的:把 调用 webservice 改成异步调用完成后回调 执行button1.Enabled= true;
随时随地看视频慕课网APP
我要回答