Это можно было бы сделать довольно аккуратно, используя TPL. В основной теме вы можете запустить эту задачу в фоновом режиме с помощью:
CancellationTokenSource cancel = new CancellationTokenSource();
Task.Factory
.StartNew(() => PollHardware(cancel.Token), TaskCreationOptions.LongRunning)
.ContinueWith(t =>
{
if (t.IsFaulted)
{
var aggException = t.Exception; // Keep task from pulling down AppDomain
// Log/handle/etc
LogException(aggException.InnerException);
}
});
Тогда все, что вам нужно, это метод обработки вашего цикла:
void PollHardware(CancellationToken token)
{
while(true)
{
token.ThrowIfCancellationRequested();
YourMethod();
}
}
Если вы хотите, чтобы опрос прекратился, вы можете просто позвонить: cancel.Cancel()
.