Как получить уведомление, когда узел больше не доступен в диапазоне Wi-Fi Direct?

Я тоже наткнулся на эту проблему, потому что я экспериментировал с вызовом событий PropertyChanged извне. Поэтому вам не нужно выполнять все в каждом классе. Решение из halorty не будет работать с использованием интерфейсов.

Я нашел решение, использующее тяжелое отражение. Это, безусловно, медленно и нарушает принцип, согласно которому события следует вызывать только внутри класса. Но интересно найти общее решение этой проблемы ....

Это работает, потому что каждое событие представляет собой список вызываемых методов вызова. Таким образом, мы можем получить список вызовов и позвонить каждому слушателю, прикрепленному к этому событию, нашим собственным.

Здесь вы идете ....

class Program
{
  static void Main(string[] args)
  {
    var instance = new TestPropertyChanged();
    instance.PropertyChanged += PropertyChanged;

    instance.RaiseEvent(nameof(INotifyPropertyChanged.PropertyChanged), new PropertyChangedEventArgs("Hi There from anywhere"));
    Console.ReadLine();
  }

  private static void PropertyChanged(object sender, PropertyChangedEventArgs e)
  {
    Console.WriteLine(e.PropertyName);
  }
}

public static class PropertyRaiser
{
  private static readonly BindingFlags staticFlags = BindingFlags.Instance | BindingFlags.NonPublic;

  public static void RaiseEvent(this object instance, string eventName, EventArgs e)
  {
    var type = instance.GetType();
    var eventField = type.GetField(eventName, staticFlags);
    if (eventField == null)
      throw new Exception($"Event with name {eventName} could not be found.");
    var multicastDelegate = eventField.GetValue(instance) as MulticastDelegate;
    if (multicastDelegate == null)
      return;

    var invocationList = multicastDelegate.GetInvocationList();

    foreach (var invocationMethod in invocationList)
      invocationMethod.DynamicInvoke(new[] {instance, e});
  }
}

public class TestPropertyChanged : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;
}
14
задан Student 27 July 2018 в 11:30
поделиться