WEB开发网
开发学院软件开发VC 更新MFC中的视图,跟踪.NET Framework中的事件 阅读

更新MFC中的视图,跟踪.NET Framework中的事件

 2006-07-19 11:28:40 来源:WEB开发网   
核心提示: // spy on myselfspy = new EventSpy("MySpy", this);spy.SpyEvent += new SpyEventHandler(OnEventSpy);当目标对象(spyee)产生任何一种事件,EventSpy就产生一个Spy
// spy on myself
spy = new EventSpy("MySpy", this);
spy.SpyEvent += new SpyEventHandler(OnEventSpy);

当目标对象(spyee)产生任何一种事件,EventSpy就产生一个SpyEvent事件。此时,SpyEventArgs.EventName 就是事件的名字,SpyEventArgs.EventArgs 包 含原始的事件参数。如何处理这些事件是你自己的事。SpyTest 将该事件报告给诊断流。

// in main form
private void OnEventSpy(Object sender,
 SpyEventArgs e)
{
  Trace.WriteLine(String.Format("{0}: On{1}: {2}",
   sender.GetType(), e.EventName, e.EventArgs));
}

Figure 3 示范了一个典型的运行结果。先去下载代码,自己试着运行一下——它 确实能运行!EventSpy 还有一个 DumpEvents 函数,列出所有你的目标类暴露的事件。

Figure 3 SpyTrace

如果你只是想用 EventSpy 来跟踪事件,你可以不用阅读此文,直接到 MSDN Magazine 网站下载源代码。对于那些忍不住想自己实现类似 EventSpy 功能的狂热者(祝你好运!),我下面简要概述一下 EventSpy 的工作原理。

讨论事件最终结果是为了跟踪事件,你必须动态生成一个类似 Figure 4 那样的类。在创建这个类之前,你需要为它创建一个集合和模板。System.Reflection.Emit 使用 AssemblyBuilder、ModuleBuilder、TypeBuilder、FieldBuilder、ConstructorBuilder 和 MethodBuilder 来创建你需要的任何东西。这里演示如何创建一个集合。

AssemblyName an = new AssemblyName();
an.Name = "EventSpyHelper";
AssemblyBuilder asm = AppDomain.CurrentDomain.DefineDynamicAssembly(an,
                         AssemblyBuilderAccess.Run);

创建模块更简单。创建这个类、字段和方法很象给每个东西取一个名字和标记那样直截了当。最难的部分是何时生成实际代码——换句话说, 也就是每个事件的容器和事件处理器。关键的类叫ILGenerator。Figure 4 演示 EventSpy 如何编写这个事件处理器,

上一页  1 2 3 4 5 6 7  下一页

Tags:更新 MFC 视图

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接