Если есть задача запуска чего-то на настольном компе, то можно попробовать извернуться следующим образом:
- На C# написать прикладное ПО, которое взаимодействует с пользователем/БД/(нужное дописать)
- Через (например) USB/Serial port подключить плату с микроконтроллером
- На микроконтроллере (у него частота известна) запустить программу, которая, манипулируя NOPами, обеспечивает необходимые задержки. Точность, очевидно, будет очень высокая — половина такта процессора микроконтроллера (с учетом погрешности тактового генератора)
- Приложение на C# в нужные моменты посылает сигнал плате с микроконтроллером.
В этом случае будут неизбежные задержки отправки сигнала плате из приложения на C# (по причинам, указанным выше), но сама плата будет выдавать гарантированную частоту. Человек задержки на стороне C# не заметит, а оборудование, которому шлёт сигналы микроконтроллер, будет получать комфортную частоту сигнала.
Плату с микроконтроллером можно заменить на что-то, на чём запущена Realtime OS. Суть не сильно поменяется.