nf3*_*743 2 c# events overriding process
我正在使用System.Diagnostics.Process该类来执行命令行程序.
我正在使用该OutputDataReceived方法将输出重定向到我自己的方法.
pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);
pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived);
Run Code Online (Sandbox Code Playgroud)
但是,我有多个线程运行此cmd程序的多个实例.我想要做的是能够识别输出数据来自哪个流程实例 - 理想情况下,包含名称的字符串.(每个进程在GUI上都有自己的进度条.我创建了另一个事件来将输出传递给GUI,因此,我需要知道数据来自哪个进程来更新其进度条).
我开始尝试:
public override delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e, string processName);
Run Code Online (Sandbox Code Playgroud)
然后我意识到我必须覆盖OutputDataReceivedProcess类中的方法.这反过来意味着我必须创建一个继承的自定义类System.Diagnostics.Process,并且有一个接受字符串参数的方法,以便OutputDataReceived事件可以将流程实例名称(字符串)传递给我的重写DataReceivedEventHandler.
问题的目的是获得关于如何进行的一些意见.我的建议似乎是实现我想要的正确方法吗?或者,有更好的方法吗?
除了使用的现有答案之外sender,您还可以使用lambda表达式(或匿名方法)来简化:
pr.OutputDataReceived += (sender, args) => HandleData(pr, args);
Run Code Online (Sandbox Code Playgroud)
哪里HandleData会有签名
void HandleData(Process process, DataReceivedEventArgs e)
Run Code Online (Sandbox Code Playgroud)
匿名函数是将事件订阅时本地已知的信息传播到需要处理事件的代码的非常方便的方式.
| 归档时间: |
|
| 查看次数: |
5291 次 |
| 最近记录: |