找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 385|回复: 6

.NET组件中的线程辅助的学习

[复制链接]
发表于 2009-3-16 18:22:56 | 显示全部楼层 |阅读模式 IP:江苏扬州
在Understanding COM Threading Models and Apartments from a .NET Application's perspective 这一章,你知道在创建经典COM组件之前,.NET 应用程序是怎样宣告调用线程单元辅助。现在看一下等式的另一方面。尤其是当从非托管 COM感知应用程序创建了.NET组件时,.NET组件的线程辅助被文本定义,而对象就处在这个文本中。本质上来说,一个Context就是AppDomain(轻型过程)拥有的环境 ,而对象就是在AppDomain 中创建的。每一个文本都依次拥有对象,这些对象享用公共的使用要求,例如:线程辅助、对象池化、交易、JIT 激活、同步等。当依靠属性的执行时要求时,而且对象也要求中断服务时,就会创建这些文本。如果这里有一个文本,此嗯本与使用规则相匹配,然后执行时就会在那个文本中提供调节。如果它没有找到一个相匹配的文本,就会为对象创建一个新文本。
     前面说到,每一个AppDomain都有一个默认文本。默认文本.依次拥有Context Agnostic (Context Agile)对象。这些对象没有绑定到任何文本。Context Agile 对象不要求任何属性,特殊使用规则以及中断服务。让我们看一下下面的表格,此表格总结了基于它们自己文本敏捷度的跨文本访问方案中.NET 组件是怎样执行的


图1

被非托管COM感知客户端访问时的线程中立行为
     当一个程序集经过REGASM.EXE,想为COM 感知客户端创建正确的注册途径时,.NET组件是怎样把它的线程模式转到COM的。
     InprocServer32下面的ThreadingModel钥有一个'Both'值。在Classic COM中,把它们的ThreadingModel作为'Both'的对象,期望移到它们的呼叫者单元,此呼叫者单元可以是STA或者MTA。除此以外,'Both'线程对象也集合自由线程封送拆收器,给被它们封送拆收事物提供单元,也集合直接接口指针引用,以此反对代理。Context Agile .NET 组件(不是从ContextBound对象扩展而来的)与中立线程COM对象相似,此中立线程COM对象集合自由线程封送拆收器。当我们通过非托管客户端中的COM 单元将接口引用传输到.NET组件时,.NET组件是怎样运行的。让我们看一下这个简单的C#类型:将向非托管 COM客户端展示这个C#类型:
using System;
using System.Runtime.InteropServices;
public interface IHelloDotNet {
String GetThreadID();
}/* end interface IHelloDotNet */
[ClassInterface(ClassInterfaceType.None)]
public class HelloDotNet : IHelloDotNet
{
public HelloDotNet() {
}
public String GetThreadID() {
return AppDomain.GetCurrentThreadId().ToString();
}
}/* end class HelloDotNet */
      

     上面的类型执行来自于IHelloDotNet接口的GetThreadID方法。这个方法返回当前线程的ID,此当前线程正将AppDomain运行到这个对象下载的事物里。为了把上面的类型建成一个程序集,为COM创建正确注册途径,从命令行中执行下列命令。
csc /target:library /out:HelloDotNet.dll HelloDotNet.cs
regasm HelloDotNet.dll /tlb:HelloDotNet.tlb
     现在继续使用来自于COM感知客户端的.NET组件。我们将使用一个C++ 控制台应用程序,此C++ 控制台应用程序将在它的主线程 (一个STA)中创建.NET组件,然后通过生成其它两个背景工作执行绪,把它传送到另外两个单元(一个STA单元和一个MTA单元)。
发表于 2009-12-1 23:05:09 | 显示全部楼层 IP:香港
对不起,我走错地方了,呵呵
回复

使用道具 举报

发表于 2009-12-3 22:05:06 | 显示全部楼层 IP:广东广州
感觉好像在哪里看过了,汗~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 07:17 , Processed in 0.242152 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表