如何在windows ce监听反射的事件,我是用的C#,基于.net compact framework 2.0。
有一个app.dll里有class1,class1定义了一个事件event1,我想在我的程序中动态加载该dll,并且绑定一个方法来处理event1。
如下代码
ass = Assembly.Load(sDllName);structInstance = ass.CreateInstance(sAppName);Type structType = structInstance.GetType();EventInfo eventInfo = structType.GetEvent("OnScanerComplete", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);Type tDelegate = eventInfo.EventHandlerType;MethodInfo miHandler = typeof(ScanForm).GetMethod("ScanerComplete");Delegate d = Delegate.CreateDelegate(tDelegate, this, miHandler);MethodInfo miAddHandler = eventInfo.GetAddMethod();object[] addHandlerArgs = { d };miAddHandler.Invoke(structInstance, addHandlerArgs);该代码在 .Net CF 3.5框架下可以实现,但是在 .Net CF 2.0框架下,找不到Delegate.CreateDelegate方法。
请问各位有没有其它办法在2.0下实现。

解决方案 »

  1.   

    Delegate.CreateDelegate没有原始的类能代替貌似 ,只能new 一个delegate了
      

  2.   

    我记得.Net CF 3.5也只有2M多大,通过连线拷贝自不必说,弄个互联网网页下载它到设备上也不会慢多少。如果可能,装3.5吧。
      

  3.   

    嗯,懒得给你查了。你看绕一下可以不可以?!你可以设计一个固定的“代理”,例如public class MyDelegateProxy
    {
      public MethodInfo method;  public object[] parameters;
      
      public void CallMethod()
      {
         method.Incoke(......);
      }
    }
    然后你的代码就可以不去直接用反射的method来创建Delegate实例,而使用这样来创建DelegateMyDelegateProxy p= new MyDelegateProxy();
    p.method= miHandler;
    p.parameters=.....;
    ThreadStar del= new ThreadStar(p.CallMethod);
    这样你就可以用del来代理执行miHandler了!
      

  4.   

    method.Incoke(......);  -->  method.Invoke(......);另外在MyDelegateProxy类型中应该定义一个 public object Result; 用来保存代理执行之后的方法返回值。