我有一个需要长时间操作的表单(树视图节点的扩展在网络中搜索其他项目以创建更多树节点) - 所以我打算使用BackgroundWorker来完成此任务。在长时间操作期间,我希望光标是等待光标,我希望除了取消按钮之外,整个表单都是不可点击的。我知道我可以使用Enabled = false但这会使树视图变成灰色,看起来非常蹩脚。
我可能不会使用BW,但这意味着我必须使用DoEvents来改变游标,并且可能会出现“Not Responding”,我讨厌。
我考虑过处理所有鼠标点击事件和键盘事件,以便在BW忙碌时取消它们...这是我当前的计划。我只是想知道我是否遗漏了一些东西,如果有另一种方式的话。
感谢。
答案 0 :(得分:2)
没有简单的方法可以做到这一点。最好修复树视图并使用Enabled
属性。您还可以在“模态”对话框中显示进度条 - 这将阻止UI
答案 1 :(得分:0)
您可以使用Panel作为表单上的叠加层,全部或部分透明,仅在取消按钮时传播点击次数 - similar to the way browsers simulate modal windows by 'graying' the background with an overlay。
当你处于处理模式时,将面具的Z-Order设置在所有其他控件的前面,当完成时将它设置在它们后面。
答案 2 :(得分:0)
您可以使用后台工作程序并弹出另一个带有进度条的对话框,该对话框显示当前进度和取消按钮。你可以在哪里用户
popup = new ProgressWindow();
popup.Owner=this;
popup.show();
取消按钮将取消后台工作人员。通过这种方式,您的后退表单将无法点击,弹出窗口将保留在顶部,并带有取消按钮。