我在这里有 2 个建议。我正在运行一个 Windows 应用程序。第一个建议是我应该将消息直接写入控制台(命令提示符),即使它不是控制台应用程序。
第二个选项是我应该创建一个控制台应用程序,它应该在其中读取 Windows 应用程序生成的日志文件并将其写入控制台。请注意,Windows 应用程序将在运行时实时更新日志文件,我希望控制台应用程序在下一刻读取日志中的每条更新消息。这可能吗?
哪个可行??我怎么能做到这一点?
非常感谢快速响应..谢谢...
我在这里有 2 个建议。我正在运行一个 Windows 应用程序。第一个建议是我应该将消息直接写入控制台(命令提示符),即使它不是控制台应用程序。
第二个选项是我应该创建一个控制台应用程序,它应该在其中读取 Windows 应用程序生成的日志文件并将其写入控制台。请注意,Windows 应用程序将在运行时实时更新日志文件,我希望控制台应用程序在下一刻读取日志中的每条更新消息。这可能吗?
哪个可行??我怎么能做到这一点?
非常感谢快速响应..谢谢...
第三种方法 - 使用进程间通信来监听来自控制台应用程序的 winforms 应用程序事件。例如,您可以使用 .NET Remoting、WCF 或 MSMQ。
因此,您需要从 Windows 窗体应用程序写入日志,并在控制台应用程序中接收相同的数据,然后您可以利用 NLog 日志框架,它可以将日志写入文件和 MSMQ。从 Nuget.0获取NLog.dll和NLog.Extended.dll在NLog.config文件中配置两个目标:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="MSMQ" name="msmq" queue=".\private$\CoolQueue"
useXmlEncoding="true" recoverable="true" createQueueIfNotExists="true"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"/>
<target xsi:type="File" name="file" fileName="logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="msmq" />
<logger name="*" minlevel="Trace" writeTo="file" />
</rules>
</nlog>
然后在您的 winforms 应用程序中获取记录器
private static Logger _logger = LogManager.GetCurrentClassLogger();
并使用它来编写日志消息:
private void button1_Click(object sender, EventArgs e)
{
_logger.Debug("Click");
}
现在转到控制台应用程序。您需要从 MSMQ 队列中读取消息,这些消息由 winforms 应用程序发布。创建队列并开始监听:
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();
}
如果您想使用远程处理,请查看构建基本的 .NET 远程处理应用程序一文。