我正在使用Ami Bar http://www.codeproject.com/KB/threads/smartthreadpool.aspx的SmartThreadPool
虽然这里提到了STA线程可以派生,但我找不到一个例子。我想在我的池中创建所有STA线程。
发布于 2011-11-08 22:19:08
馊主意。线程池线程的生命周期由它执行的代码决定,最好是短的和快的。这不是STA线程的规则,只要在该线程上创建的COM对象尚未完成,它就必须保持活动状态并产生一个消息循环。这是一个与TP线程非常不兼容的需求。不管怎样,尝试这样做只会给你带来永无止境的痛苦,"COM对象已经从它的底层RCW中分离出来,不能使用“异常以及死锁。这就是为什么MTA线程总是.NET的原因。
您必须使用常规线程。
发布于 2012-11-29 17:10:44
为了完整性,current version确实支持STA线程:
STPStartInfo stpStartInfo = new STPStartInfo();
stpStartInfo.ApartmentState = ApartmentState.STA;
SmartThreadPool stp = new SmartThreadPool(stpStartInfo);发布于 2012-08-20 12:21:58
我分析了源代码,发现SmartThreadPool不支持STA线程。创建它们的唯一方法是修改源代码,如下所示:
if (_stpStartInfo.StartSTAThreads) { workerThread.SetApartmentState(ApartmentState.STA);}
在workerThread.Start()调用之前添加到SmartThreadPool.StartThreads方法。
https://stackoverflow.com/questions/8051388
复制相似问题