在VB.net中忙时禁止事件处理

时间:2012-02-24 19:52:31

标签: .net vb.net events

我有一个带有几个按钮的表单,当用户按下其中一个按钮时,它开始一个漫长的过程(需要几秒钟)。我想要发生的是,在初始按钮按下完成该过程之前,将忽略在表单上任何其他按钮上发生的任何后续按钮按下。实际发生的是随后的按钮按下进入队列并按顺序执行,因为每个完成的过程。我的意思是,如果每个按钮执行一个需要2秒钟的功能并且我非常快速地击中5个按钮(比不到2秒钟)它会导致一系列需要10秒的事件......我想要发生什么这是为了让它只导致第一次按下按钮,然后按下激活功能需要的2秒钟。

我正在编写通过USB转UART转换器与硬件接口的软件,并且正在使用虚拟COM端口,时序至关重要。我只想在按下按钮时发生一些事情,而不是在排队等待上一次操作完成后几秒钟。

4 个答案:

答案 0 :(得分:1)

更困难但更富有成效的方法是将繁忙的工作转移到BackgroundWorker线程。您仍然需要管理表单上的控件以限制用户在处理早期请求时可能执行的操作,但它还允许您的表单在完成手头任务时重新绘制和处理其他事件。

答案 1 :(得分:0)

考虑在长时间运行的操作开始时简单地禁用所有按钮,并在完成后重新启用它们?

答案 2 :(得分:0)

有几种方法可以做到这一点。最简单的可能是在单击第一个按钮时将表单的Enabled属性设置为false,然后在过程完成时将其设置为true:

Try
    this.Enabled = False;
    ... do your work
Finally
    this.Enabled = True;
End Try

答案 3 :(得分:0)

我建议您在.NET中使用Queue ..

在您按下的每个按钮上添加特定命令或枚举到您的队列..

完成后,每个进程都会使您的命令出列,并检查队列是否有更多的命令或操作。

这不会使用户无法启用按钮并重新启用它们。

我希望这会有所帮助