public static void Main()
ProcessBusinessLogic bl = new ProcessBusinessLogic();
bl.ProcessCompleted += bl_ProcessCompleted;
public static void bl_ProcessCompleted(object sender, ProcessEventArgs e)
Console.WriteLine("Process " + (e.IsSuccessful? "Completed Successfully": "failed"));
Console.WriteLine("Completion Time: " + e.CompletionTime.ToLongDateString());
public class ProcessEventArgs : EventArgs
public bool IsSuccessful { get; set; }
public DateTime CompletionTime { get; set; }
public class ProcessBusinessLogic
public event EventHandler<ProcessEventArgs> ProcessCompleted;
public void StartProcess()
var data = new ProcessEventArgs();
Console.WriteLine("Process Started!");
data.IsSuccessful = true;
data.CompletionTime = DateTime.Now;
OnProcessCompleted(data);
data.IsSuccessful = false;
data.CompletionTime = DateTime.Now;
OnProcessCompleted(data);
protected virtual void OnProcessCompleted(ProcessEventArgs e)
ProcessCompleted?.Invoke(this, e);