首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SmartThreadPool中创建STA线程

如何在SmartThreadPool中创建STA线程
EN

Stack Overflow用户
提问于 2011-11-08 21:48:06
回答 3查看 909关注 0票数 1

我正在使用Ami Bar http://www.codeproject.com/KB/threads/smartthreadpool.aspx的SmartThreadPool

虽然这里提到了STA线程可以派生,但我找不到一个例子。我想在我的池中创建所有STA线程。

EN

回答 3

Stack Overflow用户

发布于 2011-11-08 22:19:08

馊主意。线程池线程的生命周期由它执行的代码决定,最好是短的和快的。这不是STA线程的规则,只要在该线程上创建的COM对象尚未完成,它就必须保持活动状态并产生一个消息循环。这是一个与TP线程非常不兼容的需求。不管怎样,尝试这样做只会给你带来永无止境的痛苦,"COM对象已经从它的底层RCW中分离出来,不能使用“异常以及死锁。这就是为什么MTA线程总是.NET的原因。

您必须使用常规线程。

票数 4
EN

Stack Overflow用户

发布于 2012-11-29 17:10:44

为了完整性,current version确实支持STA线程:

代码语言:javascript
复制
STPStartInfo stpStartInfo = new STPStartInfo();
stpStartInfo.ApartmentState = ApartmentState.STA;
SmartThreadPool stp = new SmartThreadPool(stpStartInfo);
票数 2
EN

Stack Overflow用户

发布于 2012-08-20 12:21:58

我分析了源代码,发现SmartThreadPool不支持STA线程。创建它们的唯一方法是修改源代码,如下所示:

  1. 将StartSTAThreads属性添加到STPStartInfo类。
  2. 添加

if (_stpStartInfo.StartSTAThreads) { workerThread.SetApartmentState(ApartmentState.STA);}

在workerThread.Start()调用之前添加到SmartThreadPool.StartThreads方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8051388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档