WPF Textbox Logger-自动更新

发布于 2025-01-25 18:17:45 字数 1866 浏览 2 评论 0原文

我正在使用WPF中的文本框作为Logger。

我为每个步骤问题写一条消息

internal void WriteInfoMessage(int lognr, string v)
{
    try
    {
        tb_log.Text += "\n" + v;
    }
    catch (Exception ex)
    {
         System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate { tb_log.Text += "\n" + v; });
                tb_log.ScrollToEnd();
                tb_log.BeginChange();
    }
}

是,当消息框即将到来或完成主方法时,它是更新。如何更新每次记录?

主要方法代码

public void MainMethod()
{
    controller.WriteInfoMessage(Lognr, $"Vorlage holen von systemCFG [MH]TemplatePositionName");
    string position_TemplateName = sys.GetProfileString("MH", "TemplatePositionName", "TestTemplatePosition");
    Iposition_std masterObj = controller.GetOrderTemplate(position_TemplateName).masterobject as Iposition_std;
    controller.WriteInfoMessage(Lognr, $"Masterobjekt ist -> {masterObj}");
        
    string topOrderName = controller.GetTagName(doc, "wbs");
    log.WriteInfo(Lognr, $"TopOrder name is : {topOrderName}");
    controller.WriteInfoMessage(Lognr, $"Projekt ->  {topOrderName}");
        
    string basicorderName = controller.GetTagName(doc, "cs");
    log.WriteInfo(Lognr, $"basicorder name is : {basicorderName}");
    controller.WriteInfoMessage(Lognr, $"Auftrag ->  {basicorderName}");
        
    string positionName = controller.GetTagName(doc, "id");
    log.WriteInfo(Lognr, $"Position name is : {basicorderName}");
    controller.WriteInfoMessage(Lognr, $"Position (Leitschaufel) ->  {positionName}");
        
    createdPosition = controller.CreateStrucure(masterObj, ConfigFile, positionName);
    log.WriteInfo(Lognr, $"New position created : {createdPosition}");
    controller.WriteInfoMessage(Lognr, $"Neue Position (Leitschaufel) wurde erstellt {createdPosition}");
}

I am using an TextBox in WPF as logger.

I write a message for each step

internal void WriteInfoMessage(int lognr, string v)
{
    try
    {
        tb_log.Text += "\n" + v;
    }
    catch (Exception ex)
    {
         System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate { tb_log.Text += "\n" + v; });
                tb_log.ScrollToEnd();
                tb_log.BeginChange();
    }
}

Problem is that it is update when a MessageBox is coming or when main method is finished. How can I update it every logging?

Main method piece of code

public void MainMethod()
{
    controller.WriteInfoMessage(Lognr, 
quot;Vorlage holen von systemCFG [MH]TemplatePositionName");
    string position_TemplateName = sys.GetProfileString("MH", "TemplatePositionName", "TestTemplatePosition");
    Iposition_std masterObj = controller.GetOrderTemplate(position_TemplateName).masterobject as Iposition_std;
    controller.WriteInfoMessage(Lognr, 
quot;Masterobjekt ist -> {masterObj}");
        
    string topOrderName = controller.GetTagName(doc, "wbs");
    log.WriteInfo(Lognr, 
quot;TopOrder name is : {topOrderName}");
    controller.WriteInfoMessage(Lognr, 
quot;Projekt ->  {topOrderName}");
        
    string basicorderName = controller.GetTagName(doc, "cs");
    log.WriteInfo(Lognr, 
quot;basicorder name is : {basicorderName}");
    controller.WriteInfoMessage(Lognr, 
quot;Auftrag ->  {basicorderName}");
        
    string positionName = controller.GetTagName(doc, "id");
    log.WriteInfo(Lognr, 
quot;Position name is : {basicorderName}");
    controller.WriteInfoMessage(Lognr, 
quot;Position (Leitschaufel) ->  {positionName}");
        
    createdPosition = controller.CreateStrucure(masterObj, ConfigFile, positionName);
    log.WriteInfo(Lognr, 
quot;New position created : {createdPosition}");
    controller.WriteInfoMessage(Lognr, 
quot;Neue Position (Leitschaufel) wurde erstellt {createdPosition}");
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守护在此方 2025-02-01 18:17:45

几周前,我遇到了这个问题,我尝试了很多,但是大多数人都不适合我的需求,问题是我希望能够使用任何类,界面等的记录器,然后将其打印到TextBox / RichTextbox。我发现您可以在Logger窗口的主线程中使用EventArg并调用Logging.write.write。希望它能帮助 https://github.com/helix-development/logging/logging-sample-sample

I had this problem a few weeks ago, i tried a lot but most didn't work for my needs, problem was i wanted to be able to use logger from any class, interface etc and print out to textbox / richtextbox. i figured out that you could use a eventarg in the main thread of your logger window and call Logging.Write from anywhere and it will work, here is the sample code i made. hope it help https://github.com/Helix-Development/Logging-Sample

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文