日期:2014-05-18  浏览次数:21135 次

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消息都会依次响应(例如改变控件属性要体现在界面上,点击按钮要触发按钮的点击事件等)后,再执行后续代码。