如何避免白色空白屏幕?

时间:2009-10-13 15:31:05

标签: vb6

使用VB6

执行时,在使用数据库时显示白色空白屏幕, 如何避免VB6中的白色空白屏幕。

白色空白屏幕意味着挂起(当它与数据库一起使用时)。

如何避免?

5 个答案:

答案 0 :(得分:4)

我认为你的意思是在执行长时间运行的操作时GUI不会重绘。 (实际上不应该从Vista开始可见,但我离题了。)

如果您的长时间运行操作由多个步骤或紧密循环组成,那么您可以偶尔向DoEvents拨打电话,以使表单即使在工作时也能保持一定的响应。

另一种选择是将长期运行的工作迁移到一个单独的线程中,但最后我认为这在VB6中并不是那么简单或容易实现。

答案 1 :(得分:1)

您应该在单独的线程中使用数据库,并且任何耗时的操作也应该在单独的线程中运行。在这种情况下,您的用户界面不会被冻结。

答案 2 :(得分:1)

这实际上与您的“How to exit the program immediately”问题相同。在这两种情况下,问题是您的数据库操作阻止VB6程序执行。

  • 另一个问题的answer you accepted - 使用ADO异步执行操作 - 也将解决此黑屏问题。
  • 或者,如果您愿意,请按照我在my answer to your other question中的建议之一,通过Interop使用.NET后台工作组件this
  • 或者按照我的其他建议将数据库工作委托给ActiveX exe like this。编辑AngryHacker nice answer对此问题使用此方法。

答案 3 :(得分:1)

我将此作为另一个问题的答案发布,但该模式也适用于此:

VB6本身就是单线程的。但是,您可以通过使用在自己的进程中运行的ActiveX EXE使其有点多线程,但仍然与原始VB6创建的EXE相连。

我过去使用的是Timer对象和ActiveX EXE。这种方法使您能够在一个位置本地化所有下载逻辑,像控制常规对象一样控制它,并使其在单独的EXE中运行,因此默认情况下使其成为多线程。

所以它的工作方式是这样的:

您在ActiveX EXE对象上调用LongRunningOperation方法 在LongRunningOperation方法中,您实例化Timer并让它几乎立即启动。 您退出LongRunningOperation方法,从而将控制权交还给调用它的实体。 然后通过事件(例如LongRunningOperationProgress或LongRunningOperationComplete等等)与主应用程序进行通信(

我推荐Timer object from Karl Petersen

答案 4 :(得分:0)

您的第一直觉应该是将资源密集型操作放在单独的线程中。这在VB6中有点困难,尽管如果调用本机CreateThread API可能(但不推荐)。

您也可以迁移到VB.NET,并本地使用Thread对象。