在vb6中使用线程编程

我正在编程使用不同的随机函数以hex生成密钥并将其写入文本文件。 我只有两个cmdbutton和状态栏,它显示当前时间和进程的状态。 现在,单击cmdbutton进行密钥生成时,表单被locking,所有其他活动都被挂起,即使时间被暂停,直到进程结束。 我甚至不能中止这个过程。 如果可能,我想用线程解决这个问题。 我该怎么做,请build议。 否则,如果有其他方法来解决这个问题,请build议。

Thankyou在期待有价值的帮助

唯一在VB6中执行multithreading的“合法”方式是通过ActiveX EXE – 只需在项目属性对话框中使用每个对象的线程选项即可。 马特Curland有一个很好的例子,如何将您的标准EXE转换为multithreading的ActiveX EXE。 这样做可以使VB6debugging器工作不带崩溃,因为在IDE中一切都在一个线程上执行。

如果你想减lessActiveX EXEmultithreading的开销,那么你必须使用不支持但仍然可行的进程内multithreading。 检查Compact In-Processmultithreading:一个带有样本UI的FolderWatcher,用于安全使用CreateThread,并在新线程上安全地初始化VB6运行时(再次提供Matt Curland)。

您可能需要查看他的高级Visual Basic 6书籍以获取更多详细信息。

您可以使用CreateThread Win32 API,但请记住VB6debugging器不能处理多个线程。

另外,如果你有任何types的循环,试着在循环的某个地方打“DoEvents”。 这将严重削减业绩,但你的forms将是敏感的。

这可能是不可能的,但是你可能要考虑切换到.NET,VB完全支持线程。

另一个厚颜无耻的方法(不是很好,但它的工作原理)可能会壳一个EXE来做这个工作,并让你的VB6只是轮询一个结果文件。 这将是一个单独的过程,所以完全孤立的线程(S)。 真的很混乱,我不推荐它。

您也可以通过CreateProcess启动subprocess,并redirectIPC的StdIOstream。 匿名pipe道I / O几乎不是试图通过磁盘文件进行通信的黑客。

这里有几个免费的组件。

http://www.xtremevbtalk.com/showpost.php?p=1304628&postcount=4

我相信马特Curland ActiveX EXE方法是经典的方法。 或者,您可以使用DoEvents 。 或者把这个工作委托给一个单独的ActiveX exe文件。 你也可以使用.NET BackgroundWorker组件,但是事实certificate这是行不通的 。