![]() |
1
2
从代码片段中不太清楚如何调用最重要的init()方法以及如何启动线程。显然,创建COM对象的线程与进行somemethod()调用的线程不同。进一步假设COM服务器是单元线程,COM需要将somemethod()调用封送到创建对象的线程。调用init()的。如果那条线不再运行,欢闹就随之而来。 有一个明显的问题,您忘记调用thread.setApartmentState()。 考虑到COM已经对线程间调用进行封送,您可能无法通过启动自己的线程获得任何信息。如果COM服务器拒绝支持它,就不能神奇地使它成为多线程的。 |
![]() |
2
1
我发现了问题,不是线程间的操作。在我的guiform中,我创建了一个子窗口,并使用setParent()将其作为COM服务器应用程序窗口的父窗口。这似乎导致了COM代理断开连接的问题(尽管一个更有经验的COM专家可能不得不告诉我为什么它会这样做)。 我将完全断开与窗口的连接,而不是将控件设置为父级,只需钩住wm_windowposchanging以将控件移动到主应用程序窗口。 |
![]() |
3
0
因为COM对象是在另一个线程上创建的,所以对COM对象的所有调用都应该从该线程进行。启动GUI线程后,需要设置某种排队机制,以等待调用执行方法(可能是一个委托队列)。您的GUI代码可以将委托推入队列,当原始线程处理队列时,它将被执行(在原始线程上)。见: http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml (生产商/消费者示例,关于页面中间部分)。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |