- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在启动一个进程并重定向错误流以便能够解析它并了解发生了什么。我是这样做的:
_proc.ErrorDataReceived += new DataReceivedEventHandler(NetErrorDataHandler);
其中 NetErrorDataHandler 具有以下签名:
private void NetErrorDataHandler(object sendingProcess, DataReceivedEventArgs errLine)
到目前为止,我必须使用 DataReceivedEventArgs,但我不确定如何测试它。目前我正在运行我正在使用的过程。你不能用额外的数据创建 DataReceivedEventArgs 的实例,那么我该如何克服这个障碍呢?我现在看到如何做到这一点的唯一方法是创建一个可以为我完成工作的流程。但是,这不是用于测试目的的最佳选择。
最佳答案
我刚刚发现可以使用内部构造函数创建对象并设置内部字段。显然,这是不鼓励的,但它适用于短期模拟。这是一个例子:
private DataReceivedEventArgs CreateMockDataReceivedEventArgs(string TestData)
{
if (String.IsNullOrEmpty(TestData))
throw new ArgumentException("Data is null or empty.", "Data");
DataReceivedEventArgs MockEventArgs =
(DataReceivedEventArgs)System.Runtime.Serialization.FormatterServices
.GetUninitializedObject(typeof(DataReceivedEventArgs));
FieldInfo[] EventFields = typeof(DataReceivedEventArgs)
.GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance |
BindingFlags.DeclaredOnly);
if (EventFields.Count() > 0)
{
EventFields[0].SetValue(MockEventArgs, TestData);
}
else
{
throw new ApplicationException(
"Failed to find _data field!");
}
return MockEventArgs;
}
这样使用:
DataReceivedEventArgs TestEventArgs = CreateMockDataReceivedEventArgs("Test");
...这需要一些研究,我认为这是不可能的:-)
关于c# - 如何实例化 DataReceivedEventArgs 或者能够用数据填充它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1354308/
我正在使用 ffmpeg 在视频中添加水印。我正在尝试在控制台上写日志,但我不知道为什么我的 MyEvent事件没有调用。 public void ConvertVideo(string path)
我正在尝试扩展 DataReceivedEventArgs,以便我可以将附加数据传递给扩展 Process 的类。与仅在连接到 Process.OutputDataReceived 时从进程中获取数据
我正在启动一个进程并重定向错误流以便能够解析它并了解发生了什么。我是这样做的: _proc.ErrorDataReceived += new DataReceivedEventHandler(NetE
在控制台模式下运行应用程序时,会有一些行写入控制台。 现在我想以编程方式执行此操作。这是我使用的一些示例代码:MSDN on OutputDataReceived Event private stat
我是一名优秀的程序员,十分优秀!