|
|
|
Supreme Being
      
участник
Last Login: 31.01.2006 11:44
Сообщ.: 85,
Visits: 936
|
|
Люди что за гон с событиями в .NET!!!
Ситуация такая есть объект А у него есть какое-то событие. Дальше есть два объекта(В и С), которые держат ссылку на объект А и подписаны на это событие (на событие они подписались динамически). Дальше хуже - объект В диспозиться, но делегат в объекте А все-равно держит ссылку на уничтоженный объект и вызывает у него событие...
Короче это становиться проблемой, если один объект подписывает другого на события... тогда начинается настоящая Ж...!!! И как прикажете с этим бороться?
P.S.: В принципе я придумал как обойти эту проблему - но решение мне не нравиться. Я в обработчике события проверяю что объект еще жив, а затем уже обрабатываю событие. Но это не решение - поскольку если объекты не уничтожаются - то они висят в памяти и когда-то все это весьма радостно рухнет!!!
Короче делитесь идеями 8).
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
[quote="Sanych-sun"]Дальше хуже - объект В диспозиться, но делегат в объекте А все-равно держит ссылку на уничтоженный объект и вызывает у него событие...[/quote]
"Диспозиться" - то есть ты для него Dsipose() вызываешь? Если да, то это не удаляет объект из памяти. Он будет жить до тех пор пока на него есть ссылки их других живых объектов. Тебе нужно в Dispose() отписать его от события в классе A.
[quote="Sanych-sun"]Я в обработчике события проверяю что объект еще жив[/quote]
Каким образом?
Может приведешь пример кода чтобы легче было понять твою проблему?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 21.07.2006 17:11
Сообщ.: 484,
Visits: 5 211
|
|
Проблема известная ;))
http://rsdn.ru/Forum/Message.aspx?mid=1462160&only=1
http://rsdn.ru/forum/Message.aspx?mid=1462157&only=1
ну и вообще поиском по РСДН
http://rsdn.ru/search/?q=%F1%EE%E1%FB%F2%E8%E5+dispose&mode=rtime&group=N&group=8
|
|
|
|