2014-01-23 59 views
1

我正在開發Windows應用程序。我在主窗體中顯示日誌信息。我想添加另一個類的日誌信息。以下是按鈕單擊事件中的代碼: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

是DAL一種形式呢? – RononDex

+0

通過dal.Load(this,result);並使公共AddtoLogger ..現在你可以從你的dal類調用AddtoLogger ...但是,對於日誌記錄我會使用類似log4net – lordkain

+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

+0

但問題依然存在。我的問題是我沒有訪問表單控件,它是放棄日誌信息。 –

+0

@ManishGupta更新我的答案與教程如何實現 – RononDex

相關問題