events - .Net wrapper eventhandling -
situation:
have dll , program should use dll late binding.
every method working events. excample there logging event. want own logging method in program here problem. don't no how.
dll log class (c#):
/// <summary> /// log helper class. /// </summary> public static class log { // ######### enum ############################################################################################# /// <summary> /// log level enum. /// </summary> public enum loglevel { none = -1, debug = 0, info = 1, warn = 2, error = 3, fatal = 4 } // ######### events ########################################################################################### /// <summary> /// log helper class log event. /// </summary> public static event eventhandler<helperlogeventargs> helperlog; // ######### constructor ###################################################################################### /// <summary> /// default constructor /// </summary> static log() { helperlog += debuglog; } // ######### methods ########################################################################################## /// <summary> /// log helper class log event handling. /// </summary> /// <param name="e">log event arguments</param> public static void onhelperlog(helperlogeventargs e) { eventhandler<helperlogeventargs> handler = helperlog; if (handler != null) { handler(null, e); } } /// <summary> /// log message debug console. /// </summary> /// <param name="sender">event sender</param> /// <param name="e">log event arguments</param> private static void debuglog(object sender, helperlogeventargs e) { debug.writeline(string.format(" [{0}]: {1}", e.loglevel.tostring(), e.message)); } /// <summary> /// log message. /// </summary> /// <param name="level">log level</param> /// <param name="message">log message</param> public static void log(loglevel level, string message) { helperlogeventargs args = new helperlogeventargs(); args.loglevel = level; args.logtime = datetime.now; args.message = message; onhelperlog(args); } // ######### classes ##################################################################################### /// <summary> /// log helper class event argument class. /// </summary> public class helperlogeventargs : eventargs { /// <summary> /// log message log level. /// </summary> public log.loglevel loglevel; /// <summary> /// log message text. /// </summary> public string message; /// <summary> /// log message log timestamp. /// </summary> public datetime logtime; } } and have wrapper class in external program loads dll unfortunately in language (vb.net.):
if _oassembly nothing _oassembly = assembly.loadfrom(stfshelperdllpath) end if ' not throw exception return nothing. _otfshelper = _oassembly.createinstance("tfshelper.tfshelper") if _otfshelper nothing ' throw manually exception on error. throw new exception("## tfshelper not loaded. ##") end if now can show me how write , add logging method/ event hander in external programm called event in ddl raised?
one possible solution use reflection add event:
' add event handler dim method methodinfo = me.gettype().getmethod("<neweventhandlername>", bindingflags.nonpublic or bindingflags.instance or bindingflags.public) dim eventinfo eventinfo = _otfshelper.gettype().getevent("<eventname>") dim type type = eventinfo.eventhandlertype dim handler [delegate] = [delegate].createdelegate(type, me, method) eventinfo.addeventhandler(_otfshelper, handler)
Comments
Post a Comment