[英]C# Microsoft docs example makes no sense to me. DataReceivedEventHandler Delegate
在 Microsoft 文档中有一个使用 DataReceivedEventHandler Delegate 的示例。 但是,由于所有变量都是 static,如果我们异步调用SortInputListText()
2 次,就会出现冲突,即两者都使用sortOutput
。 似乎是一个非常糟糕的主意..
那是错的吗? 我错过了什么?
文档通常包含很多错误吗?
我应该怎么做才能没有这种冲突? (我目前正在学习代表、事件等)
private static StringBuilder sortOutput = null; private static int numOutputLines = 0; ... public static void SortInputListText() {... sortOutput = new StringBuilder(); ... }... private static void SortOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) {... sortOutput.Append(Environment.NewLine + $"[{numOutputLines}] - {outLine.Data}"); ... }
那是错的吗? 我错过了什么?
这是一个代码示例。 强调例子。 代码示例旨在说明讨论/解释的主题(在本例中,主题是 DataReceivedEventHandler)。 代码示例并不是要盲目复制粘贴到应用程序中的生产代码。
这里的这个特定代码示例与异步或并发/并行编程无关。 这里的代码示例是关于DataReceivedEventHandler的。 不多也不少。
(不要对代码示例中选择的命名空间名称感到困惑。示例命名空间“ProcessAsyncStreamSamples”不是指使用Task和async / await关键字的典型异步编程,而是指调用的 Output/ErrorDataReceived 事件处理程序/在程序执行其他操作时执行 - 在此特定代码示例的情况下,“执行其他操作”只是等待进程退出。)
文档通常包含很多错误吗?
什么??? 不,一般不会。 当然,存在糟糕且乏善可陈的文档。 有时几乎没有任何文档。 但也有好的和优秀的文档。 我什至不知道你是怎么问这个问题的……
我应该怎么做才能没有这种冲突? (我目前正在学习代表、事件等)
正如您已经注意到的,static 方法可能不适合您的应用场景。 这在代码示例中没有错误或错误,因为代码示例并不意味着成为您的应用程序的一部分(因为它只是一个代码示例)。
如何解决您的问题的一种可能方法(它不是唯一一种,但可能相对容易实现和调试):定义一个封装Process
实例的 class,处理程序方法订阅流程的输出/ ErrorDataReceived 事件,以及特定于进程和/或处理程序的任何数据。 这样,通过拥有此 class 的各个实例,您可以处理多个进程,每个进程都有自己的 Output/ErrorDataReceivedEvent 处理程序和数据,而每个处理程序或其数据不会以其他方式获取。 (旁注:由于Process
是IDisposable
,您可能希望您的 class 也实现IDisposable
......)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.