.NET Remoting 进阶之四

本文介绍了一个使用Agile对象跨上下文传递的例子。通过MyAgileClass实例展示了如何在不同上下文中调用其方法,并保持状态一致性。演示了在MyContextBoundClass构造函数中如何使用此类对象。
其他上下文中访问 Context Agile 对象
 
ContextAgile 对象
    该例中,上下文中执行的 Main() 方法调用了 MyAgileClass 对象的 DisplayContextInfo 方法。还将一个 MyAgileClass 类型的对象 myAgile 传递给 MyContextBoundClass 的构造函数。在上下文1中执行的构造函数,先执行默认构造后,调用 myAgile 的 DisplayContextInfo 方法。通过输出结果可以发现:MyAgileClass 类型的对象可以在上下文间自由地移动。即:上下文 id 分别为 0 和 1。
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Contexts;
using System.Threading;
namespace ContextTest
{
 /// <summary>
 /// MyContextBoundClass 的摘要说明。
 /// </summary>
 [Synchronization]
 public class MyContextBoundClass: ContextBoundObject
 {
  public MyContextBoundClass()
  {
   Console.WriteLine("in MyContextBoundClass Constructor");
   Diagnostics.DisplayContextInfo();  //static method by className 
  }
  //:this() means call the default constructor before execute other codes
  public MyContextBoundClass(MyAgileClass myAgile):this()
  {   
   myAgile.DisplayContextInfo();//myAgile should be in the context bound's context for it is an Agile object
  }
 }
 public class MyAgileClass
 {
  public void DisplayContextInfo()
  {
   Console.WriteLine("MyAgileClass.DisplayContextInfo()");
   Diagnostics.DisplayContextInfo();
  }
 }
 public class Diagnostics
 {
  public static void DisplayContextInfo()
  {
   Context ctx = Thread.CurrentContext;
   Console.WriteLine("Properties for context id:{0}", ctx.ContextID);
   foreach(IContextProperty ctxProp in ctx.ContextProperties)
   {
    Console.WriteLine("{0}",ctxProp.Name);
   }
  }
 }
 class ContextTest
 {
  static void Main(string[] args)
  {
   MyAgileClass myAgile = new MyAgileClass();
   myAgile.DisplayContextInfo();
   MyContextBoundClass myBound = new MyContextBoundClass(myAgile);
   Console.ReadLine();
  }  
 }
}


本文转自 august 51CTO博客,原文链接:http://blog.51cto.com/august/6926,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值