powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отписаться от события.
5 сообщений из 5, страница 1 из 1
Отписаться от события.
    #38786727
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некое глобальное событие.
Код: c#
1.
public static event EventHandler<CoreEventArgs> MyEvent;


Так, как подписаться может любой, решил по возможности обезопаситься и сделал обертку типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  static EventHandler<CoreEventArgs> ConvertHandler(EventHandler<CoreEventArgs> act)
        {
            EventHandler<CoreEventArgs> res = (o, a) => 
            {
                try
                {
                    act(o, a);
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc);
                }
            };
            return res;
        }


Подписка работает.
Код: c#
1.
MyEvent += ConvertHandler(act);


А отписка нет.
Код: c#
1.
MyEvent -= ConvertHandler(act);


Пока смотрю в сторону IObservable<T>
...
Рейтинг: 0 / 0
Отписаться от события.
    #38786764
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логично, ибо Вы создаёте новый delegate, на который указатель больше нигде не сохраняется. А для отписки нужно использовать тот ж самый экземпляр delegate. Если уж нужно перехватывать исключения, делайте это при вызове события.
...
Рейтинг: 0 / 0
Отписаться от события.
    #38786789
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81,
Тут тоже создается, но отписывается.
Код: c#
1.
2.
3.
4.
5.
 static void Program_MyEvent(object sender, CoreEventArgs e)
        {
            Console.WriteLine("Из Program_MyEvent");
        }
MyEvent -= new EventHandler<CoreEventArgs>(Program_MyEvent);


Все дело в MulticastDelegate.Equals, надо отписать в MS пусть усовершенствуют :)
...
Рейтинг: 0 / 0
Отписаться от события.
    #38786870
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно еще сюда смотреть...
...
Рейтинг: 0 / 0
Отписаться от события.
    #38786947
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВIlya81,
Тут тоже создается, но отписывается.
Код: c#
1.
2.
3.
4.
5.
 static void Program_MyEvent(object sender, CoreEventArgs e)
        {
            Console.WriteLine("Из Program_MyEvent");
        }
MyEvent -= new EventHandler<CoreEventArgs>(Program_MyEvent);


Все дело в MulticastDelegate.Equals, надо отписать в MS пусть усовершенствуют :)

Если Вы используете именованный метод класса, то экземпляр delegate будет всегда один. А для лямбда-выражений каждый раз новый. Так что с подпиской на события лямбда выражениями только два варианта: 1). сохранять в какую-то переменную указатель на delegate; 2). если отписываться от события не нужно.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отписаться от события.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]