The special sauce turned out not to be running the timer thread in the background after all. I now call Form.Activate (via Invoke) each second when I update the display; that's what it seems to take to make it work when the device is locked. I also raised the priority on the thread, which may not be necessary but does seem to keep me from losing a little time.
Also, if you want a numeric-only text entry box, you need to handle its KeyPress events and intercept letters & punctuation - not all non-numeric keys, which eats your backspace.
Also, if you want a numeric-only text entry box, you need to handle its KeyPress events and intercept letters & punctuation - not all non-numeric keys, which eats your backspace.