Подписка Prism EventAggregator с лямбда-выражением и именем метода

Я подписываюсь на eventAgrregator, используя: eventAggregator.GetEvent.subscrinbe(..)

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

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


person skippy    schedule 02.11.2015    source источник


Ответы (1)


В ПОРЯДКЕ. Я думаю, что нашел проблему. В моем лямбда-выражении я по ошибке использовал локальную переменную (.

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

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

person skippy    schedule 02.11.2015
comment
Да, это не проблема EventAggregator, а природа локальной переменной в лямбда-выражении. У меня была такая же проблема в 2020 году. :) - person Jeong Yo Han; 29.01.2020