读书人

C# Winform 事件阻止有关问题

发布时间: 2012-08-07 14:54:49 作者: rapoo

C# Winform 事件阻止问题
private void button1_Click(object sender, EventArgs e)
{
i++;
Thread.Sleep(2000);
button1.Text = i.ToString();
}

第一次按下时UI不可用两秒钟,但是在两秒钟内再按钮时候,后按得也将被执行
我想在UI不可用过程中后续事件不响应,怎样写

现在这种情况出现了重复提交

private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
i++;
Thread.Sleep(2000);
button1.Text = i.ToString();
button1.Enabled = true;
}
也不好用

[解决办法]
bool IsPress = false;
private void button1_Click(object sender, EventArgs e)
{
if(!IsPress)
{
IsPress = true;
i++;
Thread.Sleep(2000);
button1.Text = i.ToString();
IsPress = false;
}
}


[解决办法]
虽然-= += 很优雅
但按楼主的要求,不是很赞成使用
-= +=内部要处理的操作绝对比Enabled属性,或者标志量要多
还是使用Enabled属性或者标志量来处理吧

[解决办法]
MSDN上有Application.DoEvents()的详细介绍,这里是用来处理WINDOWS消息响应的,在Application.DoEvents()的插入点,所有排队等待的WINDOWS消息都会依次响应(例如改变控件属性要体现在界面上,点击按钮要触发按钮的点击事件等)后,再执行后续代码。

读书人网 >C#

热点推荐