阻止用户在执行操作时单击特定按钮
本文关键字:单击 按钮 操作 用户 执行 | 更新日期: 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
。考虑到屏幕空间有限,在移动环境中经常可以找到这样的解决方案。但我认为它也可以成功地应用到桌面上。为什么不呢?