2015-11-02 2 views
0

Я подписываюсь на eventAgrregator с помощью: eventAggregator.GetEvent.subscrinbe (..)Prism EventAggregator подписавшись с лямбда-выражения против имени метода

Если я использую лямбда-выражения, он не может быть вызван, поскольку eventAggregator использует слабые ссылки , и в какой-то момент он расположен. Однако, если указать имя метода, оно работает.

Не могли бы вы это объяснить? (примечание - объект, вызывающий eventaggregator.getevent не собран)

ответ

0

OK. Думаю, я нашел проблему. В моем лямбда-выражения я по ошибке локальной переменной (.

Он сделал компилятор, чтобы создать новый объект, который содержит переменную, и предоставить его в качестве целевого объекта к eventAggregator. Затем этот объект был удален GC, поскольку eventAggregator использует слабые ссылки.

До тех пор, пока я не использую локальные переменные в выражении лямбда, цель будет моим первоначальным объектом, и она будет работать нормально.

Смежные вопросы