c# - Process Output Capture is VERY slow -
i'm running following code in order test if external application consuming 1 of dll's (updater code)
processstartinfo psi = new processstartinfo() { filename = "tasklist.exe", arguments = @"/m myservices.dll", createnowindow = true, redirectstandardoutput = true, useshellexecute = false }; process p = new process(); p.startinfo = psi; p.start(); //debug output box, see returns txtoutput.text = p.standardoutput.readtoend(); p.waitforexit(); refresh(); if (txtoutput.text.contains("testprogram.exe")) messagebox.show("found it");
now, code works!!!....but stupid slow. can type same command cmd window , response in tenth of second, reason pause on line p.standardoutput.readtoend()
taking anywhere 1 5 minutes!!
and actual question:
does know why slow? or possibly how fix , make acceptably fast?
update: more data
if use shell window , dont capture output, can watch task run in shell window. runs marginally (very marginally) faster, still sits , takes minute before output starts appearing in shell window. no idea doing.
streamreader.readtoend
block until data read. try using process.outputdatareceived
event.
process p = new process(); p.startinfo = psi; p.outputdatareceived += outputhandler; p.start(); p.beginoutputreadline(); p.waitforexit(); p.outputdatareceived -= outputhandler; private void outputhandler(object sender, datareceivedeventargs outline) { txtoutput.text += outline.data; }
Comments
Post a Comment