Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
10.09.2020, 10:37
|
|||
---|---|---|---|
Метод Dispose для ViewModel не вызывается |
|||
#18+
Всем привет, пишу WPF-приложение на Core, в которой есть MainViewModel. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
В ней я открываю порт для прослушки и подписываюсь на события получения данных и ошибки получения данных. Инициализирую MainViewModel и MainWindow через DI-container от Core. App.xaml.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Мне необходимо при закрытии приложения освобождать ресурсы и отписываться от подписок на событий. Понимаю, что это сейчас и так сделается, когда приложение перестает функционировать, но хотелось бы сделать более универсальный случай, когда MainViewModel больше не нужна. Проблема в том,что метод Dispose не вызывается никак. Я закрываю приложение- не вызывается. Очень не хотелось бы бы подписываться на событие OnClosing окна или другие какие-либо UI-события. Паттерн IDisposable тоже не подходит, потому что нет необходимости вызывать метод Dispose в MainViewModel извне. Как можно корректно очистить ресурсы? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2020, 11:41
|
|||
---|---|---|---|
|
|||
Метод Dispose для ViewModel не вызывается |
|||
#18+
Вы регистрируйте его как синглтон, почему он должен удаляться? такой объект создается 1 раз, это же не Scope ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2020, 11:43
|
|||
---|---|---|---|
Метод Dispose для ViewModel не вызывается |
|||
#18+
Roman Mejtes, Когда я закрываю приложение, он должен ведь удалиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2020, 11:59
|
|||
---|---|---|---|
|
|||
Метод Dispose для ViewModel не вызывается |
|||
#18+
vb_sub, всё зависит от того, что вы понимаете от "закрываю приложение". когда приложение завершает работу, вся память которая была ему выделена освобождается. судя по вашему коду, в вас есть какой то ридер из последовательного порта, скорее всего внутри создается отдельный поток который читает данные с порта, пока этот поток не завершится, ваша программа будет работать (правда я не работал с этими типами). Потом может быть создан как важный и неважный, в 1 случае процесс будет ждать завершения потока, а во 2 нет. (не помню как это точно называется). Следовательно, перед тем как закрыть приложение вам нужно прекратить читать данные с порта и освободить этот ресурс. Наверное там есть методы типа Close() и Dispose() ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.09.2020, 08:35
|
|||
---|---|---|---|
Метод Dispose для ViewModel не вызывается |
|||
#18+
Roman Mejtes, просто не хочется попасть в ситуацию как с VB6 и Excel. Когда в коде работаешь с Excel-объектом, некорректно его закрываешь. Закрываешь приложение и Excel остается висящим в процессах диспетчера задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
Start [/forum/topic.php?fid=21&mobile=1&tid=1440263]: |
0ms |
get settings: |
22ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
181ms |
get tp. blocked users: |
2ms |
others: | 20ms |
total: | 320ms |
0 / 0 |