using System.Threading.Tasks;
public static async Task Main()
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - MAIN: Demo för att visa hur man kan skicka events mellan klasser med custom event för att skicka med egna EventArgs.");
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - MAIN: Fånga event för att veta när fil blivit skriven till disk.");
TestClass.OnFileExistEventHandler += (object sender, FileExistEventArgs e) =>
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - MAIN: Fil finns på disk, så nu kan jag göra nåt med den här...");
System.Threading.Thread.Sleep(2000);
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - MAIN: Arbetet med den skapade filen är klart!");
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - MAIN: Filen kunde inte skapas, så kan inte fortsätta med hanteringen som det var tänkt.");
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - MAIN: klart!");
public class FileExistEventArgs : EventArgs
public bool IsWrittenToDisk { get; set; }
public FileExistEventArgs(bool isWritten)
IsWrittenToDisk = isWritten;
public static class TestClass
public static event EventHandler<FileExistEventArgs> OnFileExistEventHandler;
public static Task Test()
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - TASK: Startar jobb som kommer skapa en fil på disk, som huvudtråden kommer öppna och göra nåt med.");
System.Threading.Thread.Sleep(2000);
OnFileExistEventHandler?.Invoke(typeof(TestClass), new FileExistEventArgs(true));
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - TASK: Gör en massa annat tungt arbete efter att filen skapats.");
System.Threading.Thread.Sleep(3000);
Console.WriteLine($"{DateTime.Now:HH:mm:ss.ffff} - TASK: Det tunga sido-jobbet är klart.");
return Task.CompletedTask;