2013-04-15 10 views
5

की एक घटना की सदस्यता लें मैं रन-टाइम के दौरान एक असेंबली लोड करने और इसकी घटनाओं की सदस्यता लेने की कोशिश कर रहा हूं। मेरे परिदृश्य में डीएलएल फ़ाइल में एक एडीडी विधि है जो दो पूर्णांक को तर्क के रूप में प्राप्त करती है और एक ईवेंट को एक कस्टम इवेंट तर्क के साथ बढ़ाती है जिसमें योग होता है।लोड की गई असेंबली

यहाँ मेरी कोड का एक हिस्सा Dll फ़ाइल को लोड करने के लिए है:

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 }); 

लेकिन, मुझे पता नहीं कैसे विधानसभा द्वारा उठाए गए घटना की सदस्यता के लिए की है। किसी भी सहायता की सराहना की जाएगी।

जोड़ा गया: उदाहरण DLL स्रोत

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; } 
     } 
    } 
} 

उत्तर

3

बस ev1 आपके पास पहले से और AddEventHandler इस तरह फोन ले:

ev1.AddEventHandler(obj, MyEventHandlerMethod); 

तथापि, क्या आप वाकई द्वारा हैंडलर सफाई सुनिश्चित करना होगा RemoveEventHandler पर कॉल करना ताकि कचरा संग्रह हो सके।

ev1.RemoveEventHandler(obj, MyEventHandlerMethod); 
+0

धन्यवाद, हालांकि दो और प्रश्न। AddEventHandler पृष्ठ पर आधारित, मुझे लोड असेंबली में प्रतिनिधि के समान हस्ताक्षर रखने के लिए एक गतिशील असेंबली और ईवेंट हैंडलर बनाना होगा। 1) उदाहरण यह नहीं दिखाता है कि आईएलजीनरेटर द्वारा रिटर्न परिणाम कैसे प्राप्त किया जा सकता है। 2) क्या मुझे पहले से हस्ताक्षर पता है, तो MyEventHandler विधि लिखने का कोई आसान तरीका है। मैंने प्रश्न के लिए डीएलएल उदाहरण के लिए स्रोत कोड जोड़ा है, अगर यह मदद करता है। – Afshin

संबंधित मुद्दे