01. juni 2016 - 11:09Der er
6 kommentarer og 1 løsning
Event fra DLL mod service
Hej
I min service prøver jeg at abonner på et event der kommer fra en dynamisk indlæst dll, men jeg får følgende fejl. Object of type 'System.EventHandler' cannot be converted to type 'TestDll.Response+EventHandler'.
instanceResponse.GetType().GetEvent("DataReceived").AddEventHandler(instanceResponse, new EventHandler(DataReceivedEventHandler)); object res = methods[0].Invoke(instance, new object[] { Data });
}
} catch(DllNotFoundException ex) { Status = false; }
Jeg loader dll i runtime og jeg kender ikke så forhånd hvilken dll jeg vil anvende, derfor det ser lidt mærkeligt ud. Dll raiser et event når dens opgave er færdig, og her skal servicen gribe eventet og gøre noget med de argumenter der er med.
/**************************************Service projekt Start*****************************************************/
public Class1 { Assembly assembly = Assembly.LoadFrom(Path + "\\" + Data.TypeNumber + ".dll");// f.eks. testdll.dll
Type type = assembly.GetType(Data.TypeNumber + ".Class1"); IEventHandler handler = Activator.CreateInstance(type) as IEventHandler; var types = assembly.GetTypes(); var internalClassType = types.FirstOrDefault(t => t.FullName == Data.TypeNumber + ".Class1"); var eventInfo = internalClassType.GetEvent("DataReceived"); eventInfo.AddEventHandler(handler, new EventHandler<myEventArgs>(DataReceivedEventHandler));
//Kun til test MethodInfo[] methods = type.GetMethods(); object res = methods[3].Invoke(handler, new object[] { Data }); }
public interface IEventHandler { void HandleEvent(object sender, myEventArgs e); }
public class myEventArgs : EventArgs { public myEventArgs(DllrxType dllData) { DllData = dllData; } public DllrxType DllData { get; set; } }
/**************************************Service projekt Slut*****************************************************/ /**************************************DLL projekt Start********************************************************/
public class Class1 : IEventHandler {
public event EventHandler<myEventArgs> DataReceived;
Repuest reg = new Repuest(); Response d = new Response();
public void HandleEvent(object sender, myEventArgs e) { DataReceived(this, e); }
public bool DLL_Logic(Service.Dlltx Data) { try { Service.Dllrx newData = new Service.Dllrx();
newData.ErrorMessage = "Det gik ok!"; HandleEvent(this, new myEventArgs(newData)); } catch (Exception ex) {
} return true; } }
/**************************************DLL projekt slut*********************************************************/
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.
Det er blevet kaldt ”det største it-nedbrud i historien” og omkostningerne kan nemt løbe op i syv milliarder kroner: Men hvem skal betale for Crowdstrikes fejl?