Я работаю с сторонней библиотекой, которая очень плотно закрыта, но не делает то, что мне нужно (Xamarin.Forms, жесты панорамирования/увеличения).Отказаться от подписки другого класса от события с отражением
Я взломал рабочий процесс, но с их последним обновлением (1.4) работа перестала работать. Изучая их код, я могу исправить свою работу, если я могу отказаться от подписки на один из классов библиотеки от прослушивания события, проблема в том, что у класса есть несколько частных методов, в которых они должны быть защищены.
Вот мой код:
public class InteractiveEventTracker: EventTracker{
public InteractiveEventTracker(IVisualElementRenderer renderer)
: base(renderer)
{
this.Renderer = renderer;
var elChgMethod = typeof(EventTracker).GetMethod("OnElementChanged", BindingFlags.NonPublic | BindingFlags.Instance);
var elChgDelegate = Delegate.CreateDelegate(typeof(EventHandler<VisualElementChangedEventArgs>), elChgMethod);
// Compile-time errors, how do I spell that?
renderer.ElementChanged -= new EventHandler<VisualElementChangedEventArgs>(elChgDelegate);
}
Ошибка времени компиляции является Выражение обозначает «переменную», где ожидается «тип» или «групповой метод».
Мои InteractiveEventTracker должен вызывать базовый конструктор, который выглядит следующим образом:
public EventTracker(IVisualElementRenderer renderer)
{
if (renderer == null)
{
throw new ArgumentNullException("renderer");
}
this.renderer = renderer;
this.renderer.ElementChanged += new EventHandler<VisualElementChangedEventArgs>(this.OnElementChanged); // this is what I want to unsubscribe
}
private void OnElementChanged(object sender, VisualElementChangedEventArgs e){
...
}
Как отказаться базовый класс, EventTracker от прослушивания события?
так почему бы и нет 'this.renderer.ElementChanged - = new EventHandl э (this.OnElementChanged) '? вы можете изменить 'private' на' protected' и попробовать его –
Grundy
Это сторонняя библиотека, я не могу изменить сам EventTracker –
на какой строке ошибка? когда вы отмените подписку? или создать делегат? – Grundy