擅长:python、mysql、java
<p>由于COM和线程的复杂性以及它们为什么会这样工作,恐怕你的问题不能用一两句话来概括。但对于初学者来说,以下是一些很好的信息,说明COM在线程环境下的行为方式:</p>
<pre><code>http://msdn.microsoft.com/en-us/library/ms809971.aspx
</code></pre>
<p>此外,您应该考虑阅读《在Win32上进行Python编程》一书。它包含了一些有用的信息,可以帮助我们更好地理解COM线程。(尽管年代久远,它仍然有用。)</p>
<p>最后,如果从您提供的引用中看不清楚,每当您的程序使用线程和COM时,您必须在代码中指明您将在线程中使用COM:</p>
^{pr2}$
<p>这种类型的调用使用所谓的单单元线程。当线程代码本身实例化COM对象时,就会发生这种情况。在</p>
<p>如果您发现自己在线程代码之外实例化了一个COM对象(并在线程代码中使用实例化的对象,例如在线程之间传递对COM对象的访问),那么这种类型的COM线程被称为多线程单元线程:</p>
<pre><code>import sys
sys.coinit_flags = 0
import pythoncom
import win32com.client
# ... outside the thread function ...
x = win32com.client.Dispatch("someCOMobject")
# ... inside the thread function ...
pythoncom.CoInitialize(pythoncom.COINIT_MULTITHREADED)
# com calls here for x
pythoncom.CoUninitialize()
</code></pre>
<p>希望这有帮助。在</p>