Winforms Winform应用程序在控制台中写入其消息

Winforms Winform应用程序在控制台中写入其消息,winforms,c#-4.0,console-application,Winforms,C# 4.0,Console Application,我在这里提出两项建议。。我有一个windows应用程序正在运行。 第一个建议是,我应该将消息直接写入控制台(命令提示符),即使它不是控制台应用程序 第二个选项是,我应该创建一个控制台应用程序,它应该在其中读取windows应用程序生成的日志文件,并将其写入控制台。请注意,windows应用程序将在运行时实时更新日志文件,我希望console应用程序在下一刻读取日志中的每一条更新消息。是否可能 哪一个可行??我如何才能做到这一点 非常感谢您的快速回复。。 感谢…和第三种方法-使用进程间通信从控制台

我在这里提出两项建议。。我有一个windows应用程序正在运行。 第一个建议是,我应该将消息直接写入控制台(命令提示符),即使它不是控制台应用程序

第二个选项是,我应该创建一个控制台应用程序,它应该在其中读取windows应用程序生成的日志文件,并将其写入控制台。请注意,windows应用程序将在运行时实时更新日志文件,我希望console应用程序在下一刻读取日志中的每一条更新消息。是否可能

哪一个可行??我如何才能做到这一点

非常感谢您的快速回复。。
感谢…

和第三种方法-使用进程间通信从控制台应用程序侦听winforms应用程序事件。例如,您可以使用.NET远程处理、WCF或MSMQ

因此,您需要从windows窗体应用程序写入日志,并在控制台应用程序中接收相同的数据,然后您可以利用NLog日志框架,它可以写入日志。从Nuget.0获取NLog.dll和NLog.Extended.dll在NLog.config文件中配置两个目标:

并使用它来编写日志消息:

private void button1_Click(object sender, EventArgs e)
{
    _logger.Debug("Click");
}
现在转到控制台应用程序。您需要从winforms应用程序发布的MSMQ队列中读取消息。创建队列并开始侦听:

string path = @".\private$\CoolQueue";

MessageQueue queue = MessageQueue.Exists(path) ?
    new MessageQueue(path) :
    MessageQueue.Create(path);

queue.Formatter = new XmlMessageFormatter(new[] { typeof(string) });
queue.ReceiveCompleted += ReceiveCompleted;
queue.BeginReceive();
收到消息时,将消息写入控制台:

static void ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{        
    Console.WriteLine(e.Message.message.Body);
    var queue = (MessageQueue)sender;
    queue.BeginReceive();
}

如果您想使用远程处理,请查看文章。

System.Console.WriteLine…写入事件日志如何?@MartinMilan:这在winforms应用程序中不起作用。我正在远程运行winform应用程序。我应该能够在当前系统的web界面中读取结果,这是我使用的另一种技术。这就是我选择基于控制台的结果的原因。您可以调用Windows API
AttachConsole
函数将WinForms应用程序连接到控制台。但是,您不能让控制台在一台计算机上运行,而WinForms应用程序在另一台计算机上运行。谢谢。但您能告诉我如何才能做到这一点吗???@VysakhVenugopal没问题,我将添加一些示例
string path = @".\private$\CoolQueue";

MessageQueue queue = MessageQueue.Exists(path) ?
    new MessageQueue(path) :
    MessageQueue.Create(path);

queue.Formatter = new XmlMessageFormatter(new[] { typeof(string) });
queue.ReceiveCompleted += ReceiveCompleted;
queue.BeginReceive();
static void ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{        
    Console.WriteLine(e.Message.message.Body);
    var queue = (MessageQueue)sender;
    queue.BeginReceive();
}