"I guess I need something completely independent of what the frmMain is doing."
You can't. ALL control updates run in the SAME main UI thread. If frmMain is busy doing DB operations or "logic processing" then it ALSO CANNOT update the current time.
You either need to:
(1) Correctly move processing to another thread.
(2) Pepper your code with "Application.DoEvents()"