阻止用户在执行操作时单击特定按钮

本文关键字:单击 按钮 操作 用户 执行 | 更新日期: 2023-09-27 18:27:51

下面是场景:
平台:Windows
IDE:Microsoft Visual Studio 2008
语言:C#
.NET框架:3.5

我的应用程序包含两个buttons-"加载数据"answers"停止加载数据"以及一个multi-line textbox。单击"加载数据"button后,一些数据开始加载到textbox中。为了防止用户多次点击"加载数据"button,我在点击后禁用了该button。当整个数据加载到textbox中时,"加载数据"button将再次激活。另一方面,单击"停止加载数据"button,数据加载将停止(如果用户希望在加载整个内容之前停止)
如前所述,为了防止用户多次点击"加载数据"button,我禁用了该button,目的是用户只能点击"停止加载数据"button,否则等待整个数据加载到textbox中。我实现了这一点。乍一看,它似乎运行良好。但在测试过程中,我发现即使"加载数据"button被禁用,如果用户点击该button,尽管当时什么都没有发生,但一旦加载了整个数据,button再次启用,就会发现在禁用状态下进行的点击被执行。就好像程序在记录击键和鼠标点击,并等待按钮再次激活一样。但在我的程序中并没有这样的按键或鼠标点击记录功能。是什么导致了这种活动?我该如何防止这种行为

谢谢

阻止用户在执行操作时单击特定按钮

一种选择是使用可重入哨兵:

您可以定义一个int字段(用0初始化),并在输入方法时通过Interlocked.Increment更新它,只有当它为1时才能继续。最后只做一个Interlocked.Decrement

为了让它对用户可见,您可以在执行开始时禁用该按钮,并在执行结束时启用它。。。

BTW:长时间运行的任务应该异步完成(例如通过单独的线程)。。。

如果您将调用设为同步调用,它将锁定整个页面,直到加载完成。

否则,你只会做你已经尝试过的方法,我想看看你的禁用状态代码,因为有东西告诉我,你只是让它看起来被禁用了,它仍然是一个功能按钮

查看这篇文章:

http://www.codeguru.com/forum/showthread.php?t=480279

我的第一个想法是删除事件处理程序,并在单击事件结束时重新绑定它。这个线程建议使用BackgroundWorker并使其异步。

我敢打赌,在加载数据之前,您甚至无法移动表单,而且您也无法停止加载数据。问题是,在加载完成之前,整个表单都会冻结。您必须在单独的线程中移动加载部件。

好吧,又是一个问题:

在开始加载时,只需隐藏一个load按钮,并显示进度条。加载完成或在stop loading上单击使load按钮再次可见。在这种情况下,您可以避免您抱怨的"连锁点击"管理。

或者管理一个按钮。首先,它是load,单击后,它变为stop load。考虑到屏幕空间有限,在移动环境中经常可以找到这样的解决方案。但我认为它也可以成功地应用到桌面上。为什么不呢?