Your while (true) will be running in a loop constantly until the time is 12:00, one dirty method could be to check how far you are away from the trigger time and go to sleep for 5 minutes or something. Although it would not be a recommended solution.
One other solution would be to write your app to perform the task and only the task, and then use the Windows inbuilt Task Scheduler to attach the application to and let windows take care of the timing/trigger.
Have you read this article;
A New Task Scheduler Class Library for .NET[
^]