繁体   English   中英

C# Microsoft 文档示例对我来说毫无意义。 DataReceivedEventHandler 委托

[英]C# Microsoft docs example makes no sense to me. DataReceivedEventHandler Delegate

在 Microsoft 文档中有一个使用 DataReceivedEventHandler Delegate 的示例 但是,由于所有变量都是 static,如果我们异步调用SortInputListText() 2 次,就会出现冲突,即两者都使用sortOutput 似乎是一个非常糟糕的主意..

  1. 那是错的吗? 我错过了什么?

  2. 文档通常包含很多错误吗?

  3. 我应该怎么做才能没有这种冲突? (我目前正在学习代表、事件等)

     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”不是指使用Taskasync / await关键字的典型异步编程,而是指调用的 Output/ErrorDataReceived 事件处理程序/在程序执行其他操作时执行 - 在此特定代码示例的情况下,“执行其他操作”只是等待进程退出。)

文档通常包含很多错误吗?

什么??? 不,一般不会。 当然,存在糟糕且乏善可陈的文档。 有时几乎没有任何文档。 但也有好的和优秀的文档。 我什至不知道你是怎么问这个问题的……

我应该怎么做才能没有这种冲突? (我目前正在学习代表、事件等)

正如您已经注意到的,static 方法可能不适合您的应用场景。 这在代码示例中没有错误或错误,因为代码示例并不意味着成为您的应用程序的一部分(因为它只是一个代码示例)。

如何解决您的问题的一种可能方法(它不是唯一一种,但可能相对容易实现和调试):定义一个封装Process实例的 class,处理程序方法订阅流程的输出/ ErrorDataReceived 事件,以及特定于进程和/或处理程序的任何数据。 这样,通过拥有此 class 的各个实例,您可以处理多个进程,每个进程都有自己的 Output/ErrorDataReceivedEvent 处理程序和数据,而每个处理程序或其数据不会以其他方式获取。 (旁注:由于ProcessIDisposable ,您可能希望您的 class 也实现IDisposable ......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM