不使用单元

 
关于那类难题网络查找会有无尽实施方案,但主旨的情致都间隔比十分的小,大概难题出于启用线程时调用相符剪贴板Clipboard.SetDataObject出错,作者把自个儿的测量检验代码展现下:

图片 1

 
建设方案:只需将thread.SetApartmentState(ApartmentState.STA);反注释就能够了。

  现身的因由:

*  单元是进程之中有着同等线程访谈需求的对象的逻辑容器。同豆蔻梢头单元中的全体指标都得以摄取从该单元中的任何线程发出的调用。
.NET Framework
不采取单元,托管对象本身肩负以线程安全的议程利用具备分享能源。由于 COM
类使用单元,因而公共语言运营
库供给在 COM interop 的状态下调用 COM
对象时创立并伊始化一个单元。托管线程能够创造并步向只允许有三个线程的单线程单
元 (STA) 恐怕隐含贰个或多少个线程的四线程单元 (MTA)。通过将线程的
ApartmentState 属性设置为 ApartmentState 枚举值之少年老成
,能够调整所创制的单元的品类。由于给定线程只可以伊始化 COM
单元壹回,因而在首先次调用非托管代码之后就无法改良单元类型。*

注:在互联网上找了两篇小说或然更能表明这一个标题。小说的不经意是,由于众多COM在.NET情况下若是采用四线程的话,会招致援用的COM不可能健康运维,
而只要不表明程序为STAThread的话,.NET就能够自动使用八十多线程来升高功能,那样就能导致不可预言的后果。

  A young ilder ~ an old beggar !

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website