|
|
||||||
Доступ к ликвидированному объекту невозможен04.02.2016, 10:52. Показов 17423. Ответов 16
Метки нет (Все метки)
Всем доброго времени суток!
Никак не могу избавиться от ошибки: System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен. Вроде, все Dispose и using(xxx x = new xxx()) {} поудалял. Что это еще может быть? И как можно отследить эту ошибку. Дело в том, что она возникает не совсем предсказуемо. Например, в TreeView:
0
|
||||||
| 04.02.2016, 10:52 | |
|
Ответы с готовыми решениями:
16
Доступ к ликвидированному объекту невозможен System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен |
|
Администратор
|
|
| 04.02.2016, 12:09 | |
|
Serg34, что представляет из себя тип MyData?
0
|
|
|
|
|
| 04.02.2016, 13:12 [ТС] | |
|
OwenGlendower, если коротко, то MyData это class, одним из свойств которого является string Name и он не реализует IDisposeable(если Вы об этом).
Или что именно в типе MyData может быть не так, просто их у меня несколько и они довольно таки сложные, чтобы так просто ответить Но они все в памяти нормально хранятся, сериализуются и десериализуются и т.д. Добавлено через 6 минут Вот стэк вызовов при ошибке (может, поможет): System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен. Имя объекта: "TreeViewModel". в System.Windows.Forms.Control.CreateHandl e() в System.Windows.Forms.TreeView.CreateHand le() в System.Windows.Forms.Control.get_Handle( ) в System.Windows.Forms.TreeNode.UpdateNode (Int32 mask) в System.Windows.Forms.TreeNode.set_Text(S tring value) в FSImark.Controls.TreeViewModel.ReBuildNo deFromFolder[TFolder](TFolder cFolder, TreeNode folderNode) в FSImark.Controls.TreeViewModel.ReBuild(O bject sender, EventArgs e) в System.EventHandler.Invoke(Object sender, EventArgs e) в FSImark.Bll.Model.OnChanged()
0
|
|
|
Администратор
|
|
| 04.02.2016, 13:30 | |
|
Serg34, изучи откуда берется TreeNode. Похоже проблема в нем. Присвоение Tag не дает ошибки т.к. оно не привязано к отображению в отличие от Text
1
|
|
|
|
|||||||||||
| 04.02.2016, 14:25 [ТС] | |||||||||||
|
Вроде, понял! Дело, скорее всего, действительно в объекте.
Точнее в его отсутствии. Ошибка выскакивает после того, как я заменяю один MyData(в моем проекте это TFolder) на другой в коллекции типа List<MyData>. Вот код в команде UndoRedo:
и обращения к ней нет, по крайней мере явных(с моей стороны) нетДа и сразу никакой ошибки не выскакивает. Ошибки появляются после следующего перестроения контрола. Странно это как-то
0
|
|||||||||||
|
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
|
|
| 04.02.2016, 14:26 | |
|
Возможно в параметре вообще null передается, проверяйте аргументы в методе перед их использованием.
type = null не выдается ошибки, если type - ссылочный.
0
|
|
|
Администратор
|
|||
| 04.02.2016, 14:39 | |||
|
0
|
|||
|
|
||||||
| 04.02.2016, 14:40 [ТС] | ||||||
|
TreeNodes берутся рекурсией из Nodes[0], который не удаляется никогда.
Правда, может, я не правильно удаляю лишние узлы? (узлы удаленных данных) Делаю так:
0
|
||||||
|
Master of Orion
|
|
| 04.02.2016, 15:30 | |
|
Serg34, какая разница, что ты удалял? Dispose фиксирует время вызова деструктора, но он может быть вызван и автоматически. Диспоз просто делает это раньше, его отсутствие не отменяет вызов деструктора.
Где-то идет обращение к IDisposable, можно поставить кнопочку "First change exception" на это исключение и ловить, какой объект был задиспозен. А потом смотреть, где и почему.
1
|
|
|
|
|
| 04.02.2016, 16:33 [ТС] | |
|
Psilon, я имел ввиду, что Remove, может, недостаточно в данном случае или еще что-то особенное нужно для удаления узла... Иначе почему такое происходит...
За "First change exception" спасибо, не знал
0
|
|
|
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
|
|
| 04.02.2016, 17:30 | |
|
Включите правила кода Microsoft на полную катушку на своем проекте (настройки проекта, правила кода).
И 50 на 50 он сразу вам укажет где возможно у вас объект используется когда он уже может быть ликвидирован. Я узнал о таких моментах при инициализации объекта в месте объявления, когда объявляемый член должен освободить ресурсы. Например: var variable = new SomeType { Name = "Username", Age = 29, .... = ... }; CA номер забыл, но даже в таких местах могут быть проблемы.
2
|
|
|
Master of Orion
|
|
| 04.02.2016, 19:32 | |
|
Serg34, ну как раз-таки верно. Раньше баг был плавающий (он бы происходил только в момент, когда сборщик удаляет объект до того, как к нему идет обращение), а теперь он всплыл.
Расскажу одну байку. Как-то раз на автовазе заказали инструмент, который мог бы определять брак. Сделали ТЗ, в котором описали супер-свойства этого прибора, инженеры долго-долго ломали голову, экспериментировали, но сделать смогли. Получился супер-точный инструмент, который находил даже самые заковыристые проблемы, которые могли спать месяцами в готовой продукции. Завезли на завод, поставили, бах - больше 30% продукции машиной автоматически отбраковывается. Что автоваз сделал? Тщательнее начали принимать материалы? А хрен там, сказали "настройте ваш прибор так, чтобы она брак пропускала в 90% случаев". И так с тех пор он там и стоит, показывая брак в районе погрешности, потому что никому не нужно было отбраковывать такой огромный объем продукции. Мораль думаю уловите сами.
0
|
|
|
|
||
| 05.02.2016, 00:34 [ТС] | ||
|
Каюсь - сам виноват, правила Microsoft тут ни при чем)))
Я создал юзерконтрол в главной форме и использовал экземпляр этого же юзерконтрола в диалоге, а у него(юзерконтрола) подписка на изменение модели Соответственно при уничтожении диалога ошибка. Все осложнялось тем, что я был в полной уверенности, что отлаживаю экземпляр юзерконтрола в главной форме, и еще ошибка появлялась не на первом обращении: А мораль поддерживаю!!! Я тоже за перфекционизм Всем Спасибо!!!
0
|
||
|
40 / 25 / 7
Регистрация: 04.10.2012
Сообщений: 127
|
||||||
| 05.02.2016, 00:44 | ||||||
0
|
||||||
|
|
|||
| 05.02.2016, 08:23 [ТС] | |||
|
Dam33,
Не по теме: Опять придется добавлять все Dispose и using(xxx x = new xxx()) {} :D Добавлено через 4 минуты
0
|
|||
|
Администратор
|
|
| 05.02.2016, 12:24 | |
|
0
|
|
| 05.02.2016, 12:24 | |
|
Помогаю со студенческими работами здесь
17
System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен Ошибка при закрытии сокета "Доступ к ликвидированному объекту невозможен" Доступ к ликвидированному объекту невозможен Ошибка "Доступ к ликвидированному объекту невозможен"
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|