Похоже, вы могли бы использовать какой-то таймер.Если вам нужно выполнить свой код в потоке пользовательского интерфейса, вы можете использовать System.Windows.Forms.Timer ;если вы довольны выполнением в потоке пула потоков, вы можете использовать System.Threading.Timer или System.Timers.Timer .
Я незаранее знать, какие из них доступны в Compact Framework, но я ожидаю, что по крайней мере один из них будет.
Если они действительно недоступны, то один из вариантов, который довольно хакерский, но сработает, - этосоздайте новый поток, который просто спит в течение 30 секунд, а затем либо выполняет необходимый код, либо выполняет маршалы в поток пользовательского интерфейса (используя Control.Invoke / BeginInvoke) для выполнения там при необходимости.Это такой грубый таймер, какой только можно получить, но он должен работать.