【问题标题】:How to Re-direct Console.Writeline() messages from a dll to Winform listbox如何将 Console.Writeline() 消息从 dll 重定向到 Winform 列表框
【发布时间】:2017-01-09 05:22:54
【问题描述】:

我的 dll 有一些实时消息,使用以下命令打印出来:

Console.Writeline("XYZ Message");

我在我的 C# Windows 窗体应用程序中引用了这个 dll。 然后使用以下命令实时打印消息:

public MyClientMainForm()
{
  AllocConsole();
  InitializeComponent();
}

但是使用这种方式我会启动一个单独的控制台窗口来显示消息。

我希望将这些消息重定向到我的 Winform 中的 Listbox,而不是单独的控制台窗口。

谁能帮我举个简单的例子。

【问题讨论】:

标签: c# winforms listbox


【解决方案1】:

Redirect Console.WriteLine to String 也许,这样你可以将你的输出转换为字符串,你可以使用listBox1.Items.Add(stringName);从字符串转换为 ListBox

【讨论】:

    【解决方案2】:

    另一种可能更简洁的方法是使用您自己的日志扩展 TextWriter 到您想要的任何位置。

    注意:我没有测试过这个。

    public class ListBoxWriter : TextWriter
    {
    private ListBox list;
    private StringBuilder content = new StringBuilder();
    
    public ListBoxWriter(ListBox list)
    {
        this.list = list;
    }
    
    public override void Write(char value)
    {
        base.Write(value);
        content.Append(value);
        if (value == '\n')
        {
            list.Items.Add(content.ToString());
            content = new StringBuilder();
        }
    }
    
    public override Encoding Encoding
    {
        get { return System.Text.Encoding.UTF8; }
    }
    }
    

    【讨论】:

    • 这个答案只是从Redirecting Console Output to winforms ListBox 复制粘贴,没有添加任何上下文。
    • @rishit_s 扩展公共类 ListBoxWriter : TextWriter 应该放在 Winform 代码的什么位置?这会好吗: public partial class MyClientMainForm : Form { TextWriter writer;公共 MyClientMainForm() { InitializeComponent(); writer = new ListBoxWriter(MyListBox); Console.SetOut(作家); } ... }//类结束
    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多