2013-04-15 26 views
5

Çalışma sırasında bir derleme yüklemeye çalışıyorum ve etkinliklerine abone oluyorum. Benim senaryoda dll dosyası, iki tamsayı argüman olarak alan ve toplamı içeren özel olay argümanı olan bir olayı yükselten bir ADD yöntemine sahiptir. Ben nasıl meclisi tarafından gündeme olaya abone olmak hiçbir fikrim yok,Yüklü bir derlemenin olayına abone olun

Assembly asm = Assembly.LoadFile(@"C:\Projects\Dll1.Dll"); 
Type typ = asm.GetType("DLL1.Class1", true, true); 

var method = typ.GetMethod("add"); 
var obj = Activator.CreateInstance(typ); 

EventInfo ev1 = typ.GetEvents()[0]; // just to check if I have the proper event 
Type tDelegate = ev1.EventHandlerType; // just to check if I have the proper delegate 

method.Invoke(obj, new object[] { 1, 0 }); 

Ama: Burada

Dll dosyasını yüklemek için benim kod parçasıdır. Herhangi bir yardım takdir edilecektir.

Eklendi: örnek DLL kaynak

namespace Dll1 
{ 
    public class Class1 
    { 
     int c = 0; 

     public void add(int a, int b) 
     { 
      c = a + b; 
      if (Added !=null) 
       Added(this, new AddArgs(c)); 
     } 

     public delegate void AddHandler(object sender, AddArgs e); 

     public event AddHandler Added; 

    } 

    public class AddArgs : EventArgs 
    { 
     private int intResult; 

     public AddArgs(int _Value) 
     { 
      intResult = _Value; 
     } 

     public int Result 
     { 
      get { return intResult; } 
     } 
    } 
} 

cevap

3

Sadece ev1 zaten sahip ve bunun gibi AddEventHandler çağrı atın: Ancak

ev1.AddEventHandler(obj, MyEventHandlerMethod); 

, emin sen temizleme işleyicisi tarafından olmak istersiniz RemoveEventHandler numaralı telefonu arayarak çöp toplama işlemi gerçekleşebilir.

ev1.RemoveEventHandler(obj, MyEventHandlerMethod); 
+0

Teşekkürler, iki soru daha olsa. AddEventHandler sayfasına dayanarak, yüklü derlemede temsilci ile aynı imzanın olması için bir dinamik derleme ve olay işleyicisi oluşturmam gerekiyor. 1) Örnek, ILGenerator tarafından geri dönüş sonucunu nasıl alabileceğini göstermemektedir. 2) İmzayı önceden biliyorsanız, MyEventHandler yöntemini yazmanın daha kolay bir yolu var mı? Yardımcı olursa, örnek Dll için kaynak kodunu soruyu ekledim. – Afshin