不使用DoEvents,如何检测按钮是否被按下?

Per*_*etz 0 vb6 click doevents

目前,我打电话的DoEvents以检查按钮美孚表格栏已被点击.这种方法有效,但它需要太多的处理能力,延误了程序.

我相信如果我只能检查Button Foo是否被点击,而不是DoEvents必须经历的所有其他形式,那么延迟可以减少.

关于如何点击Button Foo的任何想法?

Bob*_*b77 6

VB6并不是真正设计用于您正在做的事情(某种长期运行的直线代码,它不会退回以提供消息循环控制).通常,这样的任务将委托给工作线程,而在VB6中,这意味着一些外部组件大多数时候都是用C++实现的.

对于您的ad-hoc逻辑,只需要很少的方法来执行此操作:

  • Hacks通过API调用创建单独的线程,由于多种原因在VB6中不太可靠.
  • 一个棘手的每个对象的ActiveX EXE实现一个类来处理长时间运行的工作负载.
  • 由GUI程序运行和监视的单独的非交互式工作进程.

这就是它.

VB6文档中描述了执行此类操作的规定方法.您打破了长时间运行的循环并将逻辑转换为可重复的"量子"工作(如处理循环的n次迭代),并在Form-global数据中维护工作负载的状态.然后使用Timer控件,其间隔设置为1或16(几乎不重要,它们通常需要至少16ms来触发)并在其事件处理程序中运行工作负载量子.

因此,如果您只是有一个循环,当前迭代100,000次执行某些操作,您可能会将其分解,以便每个Timer tick运行500次.量子大小可能需要根据循环内的内容进行调整--500只是为了说明而选择的值.你需要调整它,直到它保持响应的UI而不会使你的后台工作负荷过多(减慢完成速度).