Я пишу приложение для WM, которое обрабатывает входящие SMS-события. Я попытался сделать его многопоточным (используя ThreadPool.QueueWorkItem), где было передано сообщение SmsMessage. Тем не менее, я заметил, что когда я это сделал, программа будет обрабатывать только первое смс-событие - после этого устройство вообще не получало никаких СМС! Но когда программа закрывается, приходят все пропущенные SMS.
Исходя из этого, я предполагаю, что ответ на мой вопрос заключается в том, что объекты SmsMessage НЕ являются поточно-ориентированными, даже если на самом деле нет признаков того, что это так.
Так что, если мы хотим попробовать создать поток SmsMessage Object? Я попробую это сегодня вечером, сделав копию сообщения SmsMessage (возможно, используя конструктор с идентификатором элемента), или создам пустое и скопирую поля вручную.
DISCOVERY:
Я сузил свою проблему. Мне удалось заставить все работать в фоновом потоке, когда я скопировал SmsMessage в свой собственный объект, стараясь не ссылаться ни на один из объектов SmsMessage. СМС летали без проблем.
Однако, когда я настроил MessageIntercepter для запуска приложения и в этом экземпляре приложения использовал фоновый поток для отправки SMS, приложение работало бы нормально, но после выхода из моего кода оно вылетало и отображало была ошибка в yourapp.exe "и спрашивает меня, хотите ли вы отправить данные о сбое в MS. Я никогда не мог понять, что это за ошибка, но я обнаружил, что если я отправляю SMS из того же потока, который запустил приложение, все работает нормально.
Итак, многопоточность, когда приложение открыто = нормально, если вы не передаете / не используете SmsMessage
Потоки при внешнем запуске приложения = отлично, если вы не отправляете сообщение SmsMessage в другой поток.