线程中出现“应用程序调用一个已为线程整理的界面”错误,请问是什么原因。(100分)

  • 主题发起人 主题发起人 杨深
  • 开始时间 开始时间

杨深

Unregistered / Unconfirmed
GUEST, unregistred user!
我在线程中处理我的Oleconntainer 和worddocument时出现
“应用程序调用一个已为线程整理的界面”错误,请问是什么原因。
请问Synchronize怎么用。后面的参数不知赋什么值?
相关问题。
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=482980
 
Synchronize(procedurea);
注意procedurea必须是一个没有参数的过程
 
各位高手请帮忙
 
我在线程中调用一个已启动了的OLE和Worddocument
 
Synchronize是用来执行用户自定义的方法
 
请问是什么原因?
 
请问是什么原因?
 
请问是什么原因
OLE是不是要在线程中创建?
而不是创建后再进行处理?
 
请问是什么原因
我的OLEContainer在主应用中有控件。
 
我也碰到过这个问题,是调用一个COM接口的时候出现的,后来发现
这个接口必须在一个函数内部定义并获得,用完后释放,
如果另一个函数要使用,必须重新定义并获得,否则就会出现你的那个问题,
不能将它定义为全局的或者类的成员变量,
不知道这对你有没有帮助
 
defisky,你好
我想也是这个问题,但是我的OleContainer在线程退出以后还要用,而且要在线程运
行过程中要观看结果,如果在线程中创建和FREE就没有什么意思了,不知有没有办法
解决?
线程中Ole对Word进行操作。
 
; 我想也是这个问题,但是我的OleContainer在线程退出以后还要用,而且要在线程运
行过程中要观看结果,如果在线程中创建和FREE就没有什么意思了,不知有没有办法
解决?
线程中Ole对Word进行操作。
 
一个线程是不能去操纵另一个线程的界面的,否则就会出现你说的哪个错误。Synchronize()方法是
TThread对象的一个方法,实际上它给出了一种在辅线程中操纵主线程的界面的一种方法。但是,
Synchronize()的参数所指定的那个函数实际上是在主线程中执行的(虽然它定义在你的辅线程中),
所以它并没有违反前面说的一个线程不能真正的去操纵另一个线程的界面。
  至于你所说的问题,似乎可以用Synchronize()方法来解决,你的OleContainer控件可以放在主线程中
任何不涉及到界面(比如说:在你的worddocument中输入内容等)的计算问题可以放在辅线程中,但只要
涉及到界面的问题,必须用Synchronize()方法传到主线程处理,如果你有多个辅线程,那线程同步和互斥就
更是大问题。所以,我觉得你还是应该把所有的Ole操作都放到一个线程中去,也就是一个VC中所谓的User
Interface线程,这种线程拥有自己的窗口和消息队列。
 
在线程中DoVerb我的线程就可以处理
但一结束就还是弹出那个对话框
我的程序没有用到多线程
主要是想用一个线程处理主进程中的OleConntainer
是想这样速度可以快一点
因为处理过程中弹出了一个用户可以终止这一处理的对话框(ShowModal)
(
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=482980
)
OleConntainer中的内容在线程结束后还要由用户编辑
就是说不能一下了完了后就Free它。
 
多人接受答案了。
 
后退
顶部