我有大量的第三方库和控制的遗留大量VB6编辑器,最近有需要来进行设置,使其多线程,这样我就可以从主编辑器形式独立运行一些其他的形式。基本上有这些其它形式和除上的按钮的从主网页的点击运行的其他形式的主编辑器之间的最小的通信。

因此,从很多使用Google的我发现,其通过将其设置为ActiveX EXE并添加类设置为全局的多使用以允许这种情况发生在当前的应用程序转换成一个多线程一个的方法。现在,一边做编辑,并通过调试模式下进行测试,我发现,当我退出了很多怪异的崩溃,有时会发生。

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub

所以,我怎么绝对必须知道,当我这样做,即。潜在的问题,等等?因为我担心的是,应用程序似乎变得越来越不稳定。还是有更好的方式来做到这一点?

更新

而不是强行入侵我的应用程序为伪多线程应用程序,我从这里善良的人们所采取的建议和重构出成分为标准EXE,并恢复了回到我的应用程序,以一个标准EXE,并通过壳给他们打电话。精美的作品:)

由于

有帮助吗?

解决方案

的Visual Basic 6是其本身不是多线程。从另一个VB6 EXE引用时在的ActiveX EXE和的ActiveX DLL之间的多任务行为的差异仅仅是显而易见的。从全球多使用类实例化对象中的ActiveX EXE在自己的环境中运行的定义。从一个的ActiveX DLL实例化的对象在主叫EXE的上下文中运行。

现在多线程可以被黑客侵入VB6,但它是非常敏感的,有很多的不(例如,你不能用在IDE停止按钮停止调试会话或程序会崩溃) 。

什么的ActiveX EXE是好是用于生成一个独立但相关的实例,可以在不暂停主程序单独运行。根据您的简要说明,我会说你最好的最好的是保持你的EXE的是更表格/模块/类,以一个单独的EXE,并有原始EXE引用的ActiveX EXE。

请注意,您不必编译到.EXE就可以更改扩展到.DLL,它仍然是一个的ActiveX EXE。你这样做,这样用户不mistakely本身运行的ActiveX EXE。

其他提示

您可以澄清这个问题一点?我不明白为什么它需要多线程?为什么你就不能显示形式的非模态的,那么他们将可以看到所有和响应的同时。除非你有运行所有的时间在你的主要形式,这听起来从你的问题不太可能一些后台处理,因为它会锁定的主要形式,以及其他。


Melaos说:嗯主编辑器FRM是这里主要的事情,我需要让用户运行其他形式做一些其他的东西,如上传的东西到我们的服务器和视频文件转换成其他格式。而且这些形式使用shell来调用其它EXE文件。和运行时间花费相当长的一段。


在这种情况下,我建议使其他形式为单独的EXE,而不是使用多线程,这是困难的。你说几乎没有通信从主窗体的子窗体 - 它只是显示他们。因此,你甚至不需要让子窗体的ActiveX EXE文件。只是使它们标准EXE和从主模壳它们。

不要去做。多线程是极其复杂的使用意图用于它的工具时正确地这样做,甚至

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top