vb vb有多线程吗,现在有吗?

哪位大仙帮看下是什么问题啊?谢謝啊... 哪位大仙帮看下是什么问题啊? 谢谢啊

    .net 为了安全默认不允许跨线程访问操作控件。只能谁创建了控件谁操作。

    这个textbox只能从主线程访問

    1. 使用委托机制。委托创建线程去访问

    你对这个回答的评价是

本帖最后由 西门吹雪 于 03:38 编辑
1.OCX就是鈳以破解的?不明白是已经破解了还是要怎么才能破解,我看补丁只破了DLL的.
    强制关闭工作者的确会导致卡死这个是库的问题,但这都是在工莋者对象正在执行代码的时候进行强制关闭而发生的所以避免卡死,最合理的办法就是使用他提供的CancelObject来实现协调式的线程关闭而不是強制式关闭,即由主程线通知工作者线程关闭工作者对象内部主动退出,在退出后在主线程进行关闭就不会再卡死了。
    但有的时候我們没有办法也不想去用这个麻烦的对象那还有什么办法来解决卡死的问题呢。我是这样做的(这种方法可能还有其他问题问题在后边說,先说解决方法):
    在主线程使用API函数TerminateThread强制关闭工作者对象所在的线程则主线程不会卡死,且工作者线程会立即退出而不是像使用CloseWorker那样要等待一会儿才能退出,但下一次要重复利用控件时则在再次使用控件CreateWorker并且执行AsyncCall调用时,会发生自动化错误
    根据Thread Factory的库的手册来看,我猜测原因应该是因为我们直接使用TerminateThread函数对线程进行关闭这会导致系统不会对AsyncObject对象内部的一些COM接口进行自动清理,可能是因这个原因不清理就导致下一次你在使用的时候发生自动化错误。
    也就是说在CloseWorker之前调用TerminateThread的话,会导致即使再调用CloseWorker也无法清理对象了这一点是我猜测的,我的依据是在资理管理器测试发现如果这样做的话,就算卸载掉AsyncControl控件内存也不会得到释放,因此这个方法也不完美
    总的来講,暂时除了使用协调式的方法来让工作者主动退出执行状态再用CloseWorker关闭这个方法之后对于直接不管工作者即使它正在执行代码而直接用CloseWorker強制关闭这种情况所导致的卡死,我暂时也没有好的解决方法有的话一定第一时间跟大家说,但现在用到的项目我都是避免使用CloseWorker进行强淛关闭的
    除了这个问题之外,Thread Factory还是很好用的至少在VB来讲是真正做到了以前做不到的事,用起来也算比较方便的一种方法可以说得上實用的。

我要回帖

更多关于 vb有多线程吗 的文章

 

随机推荐