Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb6 如何避免出现白色的空白屏幕?_Vb6 - Fatal编程技术网

Vb6 如何避免出现白色的空白屏幕?

Vb6 如何避免出现白色的空白屏幕?,vb6,Vb6,使用VB6 在执行时,它在处理数据库时显示白色的空白屏幕, 如何避免VB6中的白色空白屏幕 白色空白屏幕表示在处理数据库时挂起 如何避免这种情况?您应该在单独的线程中使用数据库,任何耗时的操作也应该在单独的线程中运行。在这种情况下,您的用户界面不会被冻结。您应该在单独的线程中使用数据库,任何耗时的操作也应该在单独的线程中运行。在这种情况下,您的用户界面不会被冻结。您的第一反应应该是将资源密集型操作放在单独的线程中。在VB6中,这有点困难,但如果调用本机CreateThread API,则可能会这

使用VB6

在执行时,它在处理数据库时显示白色的空白屏幕, 如何避免VB6中的白色空白屏幕

白色空白屏幕表示在处理数据库时挂起


如何避免这种情况?

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

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

您的第一反应应该是将资源密集型操作放在单独的线程中。在VB6中,这有点困难,但如果调用本机CreateThread API,则可能会这样做,但不建议这样做


您还可以迁移到VB.NET,并以本机方式使用线程对象。

您的第一反应应该是将资源密集型操作放在单独的线程中。在VB6中,这有点困难,但如果调用本机CreateThread API,则可能会这样做,但不建议这样做


您还可以迁移到VB.NET,并以本机方式使用线程对象。

我想您的意思是,GUI在执行长时间运行的操作时不会重新绘制自身。从Vista开始就不应该那么显眼,但我离题了

如果长时间运行的操作由多个步骤或紧密循环组成,则可以每隔一段时间对DoEvents进行一次调用,以使表单即使在工作时也保持一定的响应性


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

我想您的意思是,在执行长期运行的操作时,GUI不会重新绘制自身。从Vista开始就不应该那么显眼,但我离题了

如果长时间运行的操作由多个步骤或紧密循环组成,则可以每隔一段时间对DoEvents进行一次调用,以使表单即使在工作时也保持一定的响应性


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

这实际上是与您的问题相同的问题。在这两种情况下,问题是数据库操作阻止了VB6程序的执行

对于另一个问题-使用ADO异步执行操作-也将解决这个空白屏幕问题。 或者,如果愿意,请按照我在中的建议之一,通过互操作使用.NET后台工作程序组件,如。 或者按照我的其他建议,将数据库工作委托给ActiveX exe。编辑AngryHacker对此问题的回答使用此方法。
这实际上和你的问题是同一个问题。在这两种情况下,问题是数据库操作阻止了VB6程序的执行

对于另一个问题-使用ADO异步执行操作-也将解决这个空白屏幕问题。 或者,如果愿意,请按照我在中的建议之一,通过互操作使用.NET后台工作程序组件,如。 或者按照我的其他建议,将数据库工作委托给ActiveX exe。编辑AngryHacker对此问题的回答使用此方法。
我将此作为另一个问题的答案发布,但此模式也适用于此:

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

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

因此,其工作原理如下:

对ActiveX EXE对象调用LongRunningOperation方法 在LongRunningOperation方法中,实例化计时器并使其几乎立即启动。 您将退出LongRunningOperation方法,从而将控制权返回给调用它的实体。 然后通过事件(如LongRunningOperationProgress或LongRunningOperationComplete等)与主应用程序通信


我推荐。

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

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

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

因此,其工作原理如下:

对ActiveX EXE对象调用LongRunningOperation方法 在LongRunningOperation方法中,实例化计时器并使其几乎立即启动。 您将退出LongRunningOperation方法,从而将控制权返回给调用它的实体。 然后通过事件(如LongRunningOperationProgress或LongRunningOperationComplete等)与主应用程序通信



我向您推荐。

这种情况过去一直发生在我身上。然后,我学会了如何优化我的数据库,使之更快。问题消失了。这回答了你的问题吗?这件事以前一直发生在我身上。然后,我学会了如何优化我的数据库,使之更快。问题消失了。这回答了你的问题吗?不那么容易。这是我们正在谈论的VB6。什么不那么容易?线程方法在几乎每个平台上都是一样的。不,不是每个平台上都一样。VB6不支持同一个exe程序中的多线程。这个如何:这个:Pscode示例是M.Curland的多线程示例的翻版。不太容易。这是我们正在谈论的VB6。什么不那么容易?线程方法在几乎每个平台上都是一样的。不,不是每个平台上都一样。VB6不支持同一个exe程序中的多线程。这个如何:这个:Pscode示例是M.Curland的多线程示例的翻版。+1。我在回答Gopal关于VB6背景工作的另一个问题时提出了这个建议+1.我在回答Gopal关于VB6背景工作的另一个问题时提出了这个建议。有很多比使用CreateThread更好的方法。使用ADO对异步操作的本机支持,或者像AngryHacker回答的那样委托给ActiveX exe。有许多比使用CreateThread更好的方法。在AngryHacker的回答中,使用ADO对异步操作的本机支持,或者委托给ActiveX exe。人们在担心VB6中单独线程的后台处理时,似乎总是忽略了简单的方法。Gopal讨论的是数据库操作,所以只需使用ADO对异步处理的本机支持即可。或者,按照AngryHacker的回答,将工作委托给ActiveX exe,使其在单独的线程中运行。这两种解决方案都以最小的麻烦完成了任务,并且比.NET IMHO中的经典多线程处理更容易。人们在担心VB6中单独线程的后台处理时,似乎总是忽略了简单的方法。Gopal讨论的是数据库操作,所以只需使用ADO对异步处理的本机支持即可。或者,按照AngryHacker的回答,将工作委托给ActiveX exe,使其在单独的线程中运行。这两种解决方案都以最少的麻烦完成了任务,并且比.NETIMHO中的经典多线程更容易。