【问题标题】:How To Write To Console From Background Thread's Event Loop?如何从后台线程事件循环写入控制台?
【发布时间】:2012-02-23 06:46:24
【问题描述】:

是否可以从已启动的进程将错误消息写入控制台?通常我们习惯于在控制台中使用 Console.Writeline()。附加进程(在另一个程序集中)被设计为由控制台操作,也可能通过 GUI 操作。


但是,如果我们将方法附加到事件处理程序(即回调),则 Console.WriteLine 不起作用。

目前使用:

var thread=new Thread(someMethod);
thread.Start();

随后,回调可能会被触发,控制台消息会在这里丢失。

【问题讨论】:

  • 它应该仍然可以使用Console.WriteLine()。你有错误吗?

标签: c#


【解决方案1】:

Console.WriteLine() 应该也可以。

更新:

如果您想捕获某些控制台应用程序的输出,请查看Capturing console output from a .NET application (C#)

【讨论】:

  • +1:有用的信息。虽然不是另一个控制台应用程序。只是另一个内部线程。
【解决方案2】:

如果您担心两个消息流混合在一起,为什么不使用Console.Error.WriteLine()?然后,您可以在执行时将错误流重定向到(例如)文件。

【讨论】:

  • +1:ty。不介意两个流是否混合。只是担心一个流根本没有出现。现在只想在执行过程中看到控制台中弹出的信息。我已经更新了问题。
【解决方案3】:

我不太确定我是否理解正确。您想从子进程的标准输出中读取并在父进程的控制台中写入吗?然后您可以使用Process.StandardOutput 属性获取StreamReader 并开始阅读。

【讨论】:

  • 这是一个使用 3rd 方程序集的 .net 程序集。我想知道第 3 方 .dll 是否在回调事件中吸入控制台控制台数据。那可能吗?我更新了问题。
【解决方案4】:

如果您使用标准的 .NET 跟踪,您可以通过 app.config 配置 ConsoleTraceListenerhttp://msdn.microsoft.com/en-us/library/system.diagnostics.consoletracelistener.aspx

通过这个问题更多地探索了这种方法: Redirect Trace output to Console

正如您提到的,它非常适合用于诊断目的。您可以连接文本文件编写器等。

【讨论】:

  • +1:ty。这是非常方便的信息。问题是即使 Console.WriteLine 也失败了。我已经稍微更新了这个问题。
【解决方案5】:

这是一个外部的编译过程,即可执行文件吗?

如果您使用Process 类来启动进程,您可能正在寻找Process.StandardOutput 属性,它可以让您将通常写入控制台的文本重定向到另一个流。

否则,你能澄清一下你在说什么样的“过程”吗?

【讨论】:

  • 不是外部编译的进程。不过,这很有用。
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多