当前位置:  开发笔记 > 编程语言 > 正文

处理用户双击winforms应用程序中的按钮的最佳方式?

如何解决《处理用户双击winforms应用程序中的按钮的最佳方式?》经验,为你挑选了1个好方法。

我正在使用WinForms应用程序,我有一个用户控件.用户控件中的按钮将事件提升到要由其他代码处理的表单.其中一个按钮启动一些过程,如果它们同时运行会导致问题.我在代码中有逻辑来管理状态,因此通常用户无法运行该进程(如果它已在运行).但是,如果用户双击该按钮,它将快速启动该过程两次,以至于我很难阻止它.

我想知道,处理这个问题的最佳方法是什么?

我开始时通过在单击事件中禁用按钮,但在第一次单击导致按钮被禁用之前,第二次单击进入.在代码中设置其他标志也没有捕获它.

我正在考虑在引发事件的代码上添加某种同步锁,但我想知道你是否有更好的想法.

由于这个项目大部分都是完整的,我正在寻找不涉及对应用程序进行彻底改写的答案(比如实现复合应用程序块),但是,我也可以自由发布这些想法,因为我可以在我的下一个项目中使用它们.



1> HanClinto..:

确保您的按钮禁用或您执行的任何其他锁定是您在事件处理程序中执行的/ first/thing.如果你甚至可以在第一条指令触发之前排队两次点击事件,我会感到非常惊讶,但我想如果你是在一台非常慢的计算机上,可能会被其他应用程序陷入困境.

在那种情况下,使用标志.

private bool runningExclusiveProcess = false;

public void onClickHandler(object sender, EventArgs e)
{
    if (!runningExclusiveProcess)
    {
        runningExclusiveProcess = true;
        myButton.Enabled = false;

        // Do super secret stuff here

        // If your task is synchronous, then undo your flag here:
        runningExclusiveProcess = false;
        myButton.Enabled = true;
    }
}

// Otherwise, if your task is asynchronous with a callback, then undo your flag here:
public void taskCompletedCallback()
{
    runningExclusiveProcess = false;
    myButton.Enabled = true;
}

如果您仍然可以两次点击这样的东西,那么请确保您不会意外地订阅doubleClick事件,或者其他任何其他事情都会发生.


如果您的任务是同步的,那么这没有意义.双击中的第二次单击将在事件队列中等待,直到第一次单击退出.因此,如果你取消设置你的标志,第二次点击也会很高兴地启动这些过程.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有