Próbuję załadować zespół podczas wykonywania i zasubskrybować jego zdarzenia. W moim scenariuszu plik dll ma metodę ADD, która pobiera dwie liczby całkowite jako argumenty i podnosi zdarzenie z niestandardowym argumentem zdarzenia, który zawiera sumę.Subskrybuj wydarzenie z załadowanym zespołem
Tutaj jest częścią mojego kodu do załadowania pliku 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 });
Ale nie mam pojęcia jak do subskrypcji przypadku podniesiony przez zgromadzenie. Każda pomoc będzie doceniona.
Dodano: przykład źródło 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; }
}
}
}
Dzięki, jeszcze dwa pytania. na podstawie strony AddEventHandler, potrzebuję utworzyć dynamiczny moduł obsługi zdarzeń i zdarzeń, aby mieć ten sam podpis co delegat w załadowanym zespole. 1) przykład nie pokazuje, w jaki sposób można uzyskać wynik zwracany przez ILGenerator. 2) Czy istnieje łatwiejszy sposób napisania metody MyEventHandler, jeśli znam podpis z góry. Dodałem kod źródłowy przykładowej biblioteki DLL do pytania, jeśli to pomaga. – Afshin