在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这是行不通的 。
- System.Timers.Timer / Threading.Timer与线程与WhileLoop + Thread.Sleep的周期性任务
- GCD,线程,程序stream和UI更新
- yield()的主要用途是什么?它与join()和interrupt()有什么不同?
- 有关在.NET中干净地终止线程的问题
- Java中的synchronized方法和synchronized块之间有什么区别?
- recursion锁(Mutex)与非recursion锁(Mutex)
- 更有效的方式来暂停循环想要的
- 如何从另一个线程调用UI方法
- selectExecutorService的提交和ExecutorService的执行