我正在开发一个Windows应用程序。我在主窗体中显示日志信息。我想从另一个类添加日志记录信息。以下是按钮点击事件的代码:
private void button1_Click(object sender, EventArgs e)
{
IDAL dal = new LoadCaseDAL();
Result result = new Result();
dal.Load(result);
AddToLogger("test end");
}
AddtoLogger(){ }
AddtoLogger()和按钮点击事件是主要形式。
在dal.Load(result)方法中我调用了这个函数。我想使用AddToLogger()方法将此函数中的日志信息添加到主窗体中。
protected internal void LoadLCFiles(BoltDataset.LoadCaseDataTable dt)
{
List<string> files = Helper.GetFiles("Text Files|*.txt");
**//AddToLogger("Total files: " + files.Count().ToString());**
Task loadFilesTask = Task.Factory.StartNew(() =>
{
foreach (string filePath in files)
{
LoadLCTextFile(filePath, dt);
}
}).ContinueWith(t =>
{
if (t.IsFaulted)
{
**//AddToLogger("Loading Failed");**
}
else if (t.IsCompleted)
{
**//AddToLogger("Loading Succesfull");**
}
});
}
我怎样才能做到这一点?请建议。
答案 0 :(得分:0)
您可以将日志记录功能放在静态类中。这样,它将在您的代码中随处可用,并且不需要对象来执行它。
public static class Tools
{
public static void AddToLogger(string msg) { ... }
}
现在,每次添加消息时,都要构建一个在AddToLogger()
内调用的委托:
// Delegate for new log entries
public delegate void LogEntryAddedDelegate(string message);
public static LogEntryAddedDelegate LogEntryAdded { get; set; }
然后在AddToLogger()
函数中调用它。所以你的静态类应该是这样的:
public static class Tools
{
// Delegate for new log entries
public delegate void LogEntryAddedDelegate(string message);
public static LogEntryAddedDelegate LogEntryAdded { get; set; }
public static void AddToLogger(string msg)
{
// Do some stuff here
// Call the event
LogEntryAdded(msg);
}
}
然后你可以在表格中挂钩你的活动:
// Registers your function to get called when a new log message is added
Tools.LogEntryAdded += new Tools.LogEntryAddedDelegate(NewLogAdded);
protected void NewLogAdded(string msg)
{
// Update your textbox
}
然后你可以像这样添加新的日志消息:
Tools.AddToLogger("msg");
这样,每次向日志添加新消息时都会调用函数NewLogAdded()
。
另外,您可能需要查看日志记录框架。它们使日志记录更容易,您无需自己编写代码。
.Net的良好日志记录库是log4net