Я ищу архитектурный совет, а также более глубокое понимание делегатов и лямбд (помимо необходимости исправить реальную проблему!)
У нас есть код, взаимодействующий с устройством (шкалой) через последовательный портпорт на кпк.Мы подключаем представление для получения данных с устройства.Поскольку только одно представление за раз «подключается» к нашему экземпляру масштаба, мы использовали свойство типа Action для обработки взаимодействия между экземпляром масштаба и представлением (вместо подписки на событие).Затем представление устанавливает это свойство как лямбду, которая берет значение из шкалы и изменяет пользовательский интерфейс.
Проблема, с которой мы сталкиваемся в настоящее время, заключается в утилизации нашего представления.Если масштаб в настоящее время отправляет данные (а мы находимся внутри обработчика действий), когда представление закрывается пользователем (когда мы принудительно выполняем Dispose, поскольку мы используем CF), приложение зависает: лямбда-действие Action никогда не завершает выполнение ANDПри удалении SerialPort зависает экземпляр Dispose of scale.
Есть ли ключевое различие в том, как действие свойства класса обрабатывается в подобной ситуации по сравнению ссобытие?
На основе подробностей журнала код находится в лямбда-выражении Action (который изменяет некоторые элементы пользовательского интерфейса), когда Dispose вызывается для представления.Они оба в потоке пользовательского интерфейса - как они могут работать одновременно?Разве я не выспался прошлой ночью?
Кто-нибудь видит здесь какие-то плохие архитектурные решения, которые следует исправить?
Спасибо.Я могу попытаться привести здесь примеры кода, если описание не имеет достаточного смысла.