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