【问题标题】:Converting a Console Application into a GUI that uses a BackgroundWorker将控制台应用程序转换为使用 BackgroundWorker 的 GUI
【发布时间】:2012-05-24 23:53:30
【问题描述】:

我正在将控制台应用程序转换为 Windows 窗体应用程序和 DLL。 Windows 窗体应用程序使用 BackgroundWorker 让 DLL 执行计算量大的任务。

从控制台应用程序遗留下来的 DLL 仍然充满了Console.WriteLine() 语句。我想将过去打印到控制台的内容引导到 Windows 窗体中的 TextBox 中。理想情况下,我想在表单初始化期间将来自 DLL 的流连接到文本框并完成它。我担心这对于 BackgroundWorker 可能不是线程安全的。

我发现的最佳方法是将 DLL 中的 Console.WriteLine() 更改为 Trace.WriteLine(),然后按照 Trace listener to write to a text box (WPF application) 的方法进行操作,但我仍然对 BackgroundWorker 有疑虑,并且不太热衷于将文本附加到现有的字符串(有很多文本,IMO 字符串并不意味着/优化为在它们上面连接大量文本)。

将旧控制台输出打印到使用 BackgroundWorker 安全的文本框的最佳方法是什么?

【问题讨论】:

  • 它必须在生成时打印还是可以在最后一次打印?而这个问题更关注跨线程调用的机制,或者在不更改代码的情况下捕获Console.WriteLine 输出?
  • 我希望它在生成输出时或(更合理地)在引发“ReportProgress”事件时打印。

标签: c# console backgroundworker console-application trace


【解决方案1】:

以下博客文章可能是您正在寻找的内容:

http://saezndaree.wordpress.com/2009/03/29/how-to-redirect-the-consoles-output-to-a-textbox-in-c/

我认为它准确地描述了您的要求。基本上它使用Console.SetOut 将控制台输出重定向到您自己的流编写器。阅读帖子下方的 cmets,了解有关处理线程问题的更多信息。

【讨论】:

  • 做到了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2011-01-27
  • 2012-11-06
  • 2011-04-22
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多