如何在C#中更新GUI文本日志

时间:2015-02-04 22:41:01

标签: c#

我的GUI中有一个标签我想成为自动更新开发日志。它目前只更新初始时间。如何在DevLog.DevLog.log中的每次更改时更新this.devLogRichTextBox.Text?

// 
// devLogRichTextBox
// 
this.devLogRichTextBox.Location = new System.Drawing.Point(3, 3);
this.devLogRichTextBox.Name = "devLogRichTextBox";
this.devLogRichTextBox.Size = new System.Drawing.Size(1195, 368);
this.devLogRichTextBox.TabIndex = 0;
this.devLogRichTextBox.Text = DevLog.DevLog.log; // This doesn't do what I want. This sets the text one time to string DevLog.DevLog.log

我想从程序中的任何位置向此日志添加行:

namespace DevLog
{
    public static class DevLog
    {
        public static string log = "Default";
        public static void addToLog(string addition)
        {
            log += addition + "\r\n";
        }

        public static void clearLog()
        {
            log = "";
        }

        public static void dumpLogToFile()
        {
            //Dump log to a file on HD
        }

        public void updateGUIDevLog()
        {
             //??
        }
    }
}

我已经尝试了一些带指针的东西,但也许最好的选择是让它以固定的间隔更新,或者更好的是,每当进行修改时都会调用某种更新。

2 个答案:

答案 0 :(得分:1)

您可以在DevLog类上创建一个事件,每次更新日志时都会触发该事件。

将此字段添加到DevLog类

public static event EventHandler LogUpdated

现在,在addLog功能

的末尾
if (LogUpdated != null)
    LogUpdated(null, EventArgs.Empty); 

现在,在您的GUI类中:

DevLog.LogUpdated += (o, e) => 
{
    this.devLogRichTextBox.Text = DevLog.log;
};

现在,每次更新日志时,都会触发LogUpdated事件

答案 1 :(得分:0)

您可以从记录器中引发事件:

public static event EventHandler<string> LogLineAdded = delegate { };

public static void addToLog(string addition)
{
    string logLine = addition + "\r\n";
    log += logLine;
    LogLineAdded(null, logLine);
}

然后从客户表单订阅:

private void Form1_Load(object sender, System.EventArgs e)
{
    DevLog.LogLineAdded += DevLog_LogLineAdded;
}

private void DevLog_LogLineAdded(object sender, string logLine)
{
    this.devLogRichTextBox.Text += logLine;
}

private void Form1_FormClosed(object sender, System.EventArgs e)
{
    DevLog.LogLineAdded -= DevLog_LogLineAdded;
}

Unsubscribing from a static event from an instance handler is important