.net - Custom event Issue -
i created class run new process (a cli external application), application has own progressbar, pick progress hidden process console calculate percentage outside console, in class.
well, want make event (or else, event first think usefull) in class return integer number contains progress percentage (the percentage integer 0 99)
i've read how create custom events i'm lost trying it, don't know how retrieve integer (the variable percentage) outside class handle other class, example run method class want handle process percentage progress in default "form1" class.
this code custom class:
public class coreconverter public shared effects string = string.empty ' dsp effects ' <summary> ' gets or sets coreconverter executable path. ' </summary> public shared coreconverter_location string = ".\coreconverter.exe" public shared coreconverter new process() public shared coreconverter_info new processstartinfo() { _ .createnowindow = true, _ .useshellexecute = false, _ .redirectstandardoutput = true, _ .redirectstandarderror = true _ } public shared event progress eventhandler protected sub onprogress() raiseevent progress(me, eventargs.empty) end sub public shared sub run_coreconverter() coreconverter_info.filename = coreconverter_location coreconverter_info.standarderrorencoding = system.text.encoding.unicode coreconverter_info.standardoutputencoding = system.text.encoding.unicode coreconverter.startinfo = coreconverter_info coreconverter.start() dim percentage integer = 0 while not coreconverter.hasexited if chrw(coreconverter.standardoutput.read) = "*" percentage += 1 raiseevent progress(nothing, eventargs.empty) end if end while ' msgbox("end") end sub end class this code form1 class
public sub form1_load(sender object, e eventargs) handles mybase.shown addhandler coreconverter.progress, addressof process_progress coreconverter.run_coreconverter(arguments, blah blah blah) end sub protected sub process_progress(sender object, e eventargs) ' msgbox(e.tostring) ' want obtain integer percentage don't know how end sub notice need use addhandler handle progress event, want to handle else way can't , don't know why:
public sub form1_load(sender object, e eventargs) handles mybase.shown coreconverter.run_coreconverter(arguments, blah blah blah) end sub protected sub process_progress(sender object, e eventargs) _ handles coreconverter.progress ' msgbox(e.tostring) ' want obtain integer percentage don't know how end sub so can solve both problems?
update:
trying solve using @varocarbas solution...
coreconverter class:
public shared withevents p_progressbar progressbar public shared sub run_coreconverter() p_progressbar = new progressbar() {.maximum = 60} coreconverter_info.filename = coreconverter_location coreconverter.startinfo = coreconverter_info coreconverter.start() while not coreconverter.hasexited if chrw(coreconverter.standardoutput.read) = "*" p_progressbar.performstep() end if end while p_progressbar.dispose() coreconverter.close end sub form1 class:
public sub form1_shown(sender object, e eventargs) handles mybase.shown ' exception: p_progressbar not event (of course, know) addhandler coreconverter.p_progressbar, addressof process_progress coreconverter.run_coreconverter(arguments, blah blah blah) end sub sub process_progress(sender object, e eventargs) ' handles coreconverter.p_progressbar obviouslly can't this... :( msgbox(sender.value) end sub
finally resolved following steps of marked answer here: handle events in class
Comments
Post a Comment