2014-01-23 4 views
1

Я разрабатываю приложение Windows. Я показываю информацию журнала в основной форме. Я хочу добавить информацию о регистрации из другого класса. Ниже приведен код на событие с нажатием кнопки:windows application Механизм регистрации

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

ли Даль форма тоже? – RononDex

+0

передать это в dal.Load (это, результат); и сделать AddtoLogger общедоступным. Теперь вы можете вызвать AddtoLogger из своего dal-класса ... однако, для регистрации я бы использовал что-то вроде log4net – lordkain

+0

dal isnt form. его класс для уровня доступа к данным –

ответ

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

Смежные вопросы