User-474980206 posted
static variables are initialized on the first reference. so the code
if(!Thread.IsAlive && DateTime.Now < new DateTime(2020,12,31))
the first time Thread.IsAlive is run, it calls the initialization of Thread (poor practice to use a class name as a variable). Your initializer:
public static Thread Thread = new Thread(new ThreadStart(Work));
starts a thread, which exits quickly as it has no code to execute.