Я не знаю, что я понимаю проблему. Я понял, что вы хотите иметь приложение без пользовательского интерфейса, который отслеживает входящие SMS, но не обязательно, какая именно у вас проблема.
Я бы ожидал, что общая процедура будет выглядеть следующим образом:
static class Program
{
static MessageInterceptor interceptor;
static void Main()
{
Thread listener = new Thread(new ThreadStart(
delegate
{
interceptor = new MessageInterceptor(InterceptionAction.Notify, false);
interceptor.MessageReceived += new MessageInterceptorEventHandler(OnMessageReceived);
}));
listener.IsBackground = true;
listener.Start();
EventWaitHandle eh = new EventWaitHandle(false, EventResetMode.AutoReset, "MyShutdownEventName");
while (!eh.WaitOne(1000, true))
{
// do nothing
}
interceptor.Dispose();
}
static void OnMessageReceived(object sender, MessageInterceptorEventArgs e)
{
DoSomething();
}
}
«Но подождите, у вас там бесконечный цикл, и это убьет мою батарею», говорите вы? Едва. Как вы думаете, как работают приложения WinForms? У них есть насос сообщений, который, к удивлению, представляет собой бесконечный цикл. Я сомневаюсь, что пробуждение раз в секунду окажет какое-либо влияние на ваш профиль силы.
Если вы действительно обеспокоены, вы можете изменить тайм-аут на Timeout.Infinite, но любое использование Infinite сразу же получит от меня отрицательные моменты в обзоре кода. Бесконечное ожидание очень, очень, очень, очень, очень редко применимо вне драйвера (и даже тогда я редко использую их), потому что бесконечное ожидание говорит планировщику, что вы в порядке, никогда не выключаясь.