我的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()
{
//??
}
}
}
我已经尝试了一些带指针的东西,但也许最好的选择是让它以固定的间隔更新,或者更好的是,每当进行修改时都会调用某种更新。
答案 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