powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переопределение обработчика событий.
4 сообщений из 4, страница 1 из 1
Переопределение обработчика событий.
    #32698217
lsnk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая ситуация - кнопка в зависимости от ситуации выполняет разные функции. Я привязываю и отвязываю обработчики. При наступление некоего события (пусть будет нажатие другой кнопки) надо привязать одно конкретное (все остальные соответственно отвязать) и при этом неизвесно какой из обработчиков привязан в данный момент. Я делаю так:
Код: plaintext
1.
2.
3.
4.
this.bt.Click += new System.EventHandler(this.btClick_1);
this.bt.Click -= new System.EventHandler(this.btClick_2);
this.bt.Click -= new System.EventHandler(this.btClick_3);
this.bt.Click -= new System.EventHandler(this.btClick_4);
т. е. отвязываю все возможные (хотя не все из них были привязаны). Это работает, но у меня смутные сомнения... правильно ли я делаю (не возникнут ли проблемы потом)? и можно ли узнать какие обработчики подвязаны к собятию в данный момент?

Зы: Сорри если вопрос глупый, я начинающий :(
...
Рейтинг: 0 / 0
Переопределение обработчика событий.
    #32698368
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsnk и можно ли узнать какие обработчики подвязаны к собятию в данный момент?

Можно.
Искать по словам GetInvocationList
Например (фрагмет кода приложения):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public event ServerMessagesHandler ServerMessageSent;
void IServerCommunicator.SendMessageToClient(IServerMessage p_oMessage)
		{
			if(ServerMessageSent!=null)
			{
				AsyncCallback myAsyncCallback = new AsyncCallback(CallbackMethod);
				foreach(ServerMessagesHandler handler in ServerMessageSent.GetInvocationList())
				{
					handler.BeginInvoke(p_oMessage, myAsyncCallback, handler);
				}
			}
		}
...
Рейтинг: 0 / 0
Переопределение обработчика событий.
    #32699302
lsnk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за наводку (забыл что это все через делегаты...)
А как насчет последствий отвязки всех методов, способом описаным выше?
...
Рейтинг: 0 / 0
Переопределение обработчика событий.
    #32699557
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsnkСпасибо за наводку (забыл что это все через делегаты...)
А как насчет последствий отвязки всех методов, способом описаным выше?
Могу привести еще один пример кода, дополняющий предыдущий. Этот код используется в Remoting приложении и отвечает за нотификацию клиента. Основная мысль - асинхронная нотификация (читать "асинхронный подъем событий") с возможностью отвязки обработчика событий, если клиент "умер".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private void CallbackMethod(IAsyncResult ar)
		{
			ServerMessagesHandler del = (ServerMessagesHandler)ar.AsyncState;
			try
			{
				del.EndInvoke(ar);
			}
			catch(System.Net.Sockets.SocketException)
			{
				 //Убираем "мертвого" клиента от подписчика на наши сообщения и 
				 //сообщаем об этом всем остальным 
				ServerMessageSent -= del; 
				throw new Exception("Произошло аварийное отключение от системы нотификации одного из подключенных SpiderManager-ов");
			}
		}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переопределение обработчика событий.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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