我一个button的click事件要执行5秒钟左右(中间有延时) ,
为了防止用户连续点击时产生错误,在事件开始时 button1.Enable = false ;
最后事件结束时  button1.Enable = ture ;
但在button不可用状态下如果再连续点击几个鼠标 , 等上次事件执行完后还会执行下一次的。

解决方案 »

  1.   

    比如:private void button1_Click(object sender, EventArgs e)
    {
    this.button1.Click -= new EventHandler(button1_Click);
    //这里进行你的处理就是了
    this.button1.Click += new EventHandler(button1_Click);
    }
      

  2.   

    上面的方法不可行﹐我測試了﹐即使用visible=false都不行。真上怪事
      

  3.   

    如果会异步提交的话,可以客户端写点js代码把那个按钮disabled掉如果不会,就把当前页面的数据先提交到另外一个页面去,然后在另外一个页面处理
      

  4.   

    在同步提交中,visible=false是不会起作用的
      

  5.   

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Enabled = false;
        Thread.Sleep(2000);
        richTextBox1.AppendText(Environment.TickCount.ToString() + "\r\n");
        Application.DoEvents(); //关键语句
        button1.Enabled = true;
    }
      

  6.   

    終于找到一個笨方法﹕在Button上添加一個大小一樣的Button,Visible=false;
    當點擊button時,將隱藏的Button顯示﹐覆蓋在上面,執行完成后再隱藏,就可以解決了.
      

  7.   

    当程序繁忙的时候消息被堵住了
    所以点击消息还会被处理
    上面的代码就是将队列里的消息处理掉后才打开按钮的Enabled
      

  8.   

    zswang(伴水清清)(专家门诊清洁工) 可行﹔
    高明﹐佩服!!!
      

  9.   

    zswang(伴水清清)(专家门诊清洁工) 的方法的确可行 ,  分全得了 :)

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Enabled = false;
        Application.DoEvents(); //关键语句 , 放到延时前面就不行 。
        Thread.Sleep(2000);
        richTextBox1.AppendText(Environment.TickCount.ToString() + "\r\n");
        button1.Enabled = true;
    }