Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать кто подписан на Event 
:(
    Опции темы
ZUBR80
Дата 26.7.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



Объявляем в классе Event.
Затем кто-то подписывается на этот Event через AddHandler.
Как из объекта этого класса узнать какие делегаты подписанны? 
PM MAIL   Вверх
mr.DUDA
Дата 26.7.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



На сишарпе это делается так:

Код
using System;

class Test
{
    public Test()
    {
        // подписываемся
        this.SomeEvent += new EventHandler(Test_SomeEvent);

        // смотрим список подписавшихся на событие
        Delegate[] subscribers = this.SomeEvent.GetInvocationList();
        foreach (Delegate subscriber in subscribers)
            Console.WriteLine(subscriber.Method.Name);
    }

    // событие
    public event EventHandler SomeEvent;

    // обработчик события
    void Test_SomeEvent(object sender, EventArgs e)
    {
    }
}


class Program
{
    static void Main()
    {
        new Test();
    }
}
 


--------------------
user posted image
PM MAIL WWW   Вверх
ZUBR80
Дата 26.7.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



А на VB это не прокатывает smile
Нельзя обратиться к Eventу как к полю...
Может как-нить по другому? 
PM MAIL   Вверх
arilou
Дата 26.7.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(ZUBR80 @  26.7.2006,  08:44 Найти цитируемый пост)
Затем кто-то подписывается на этот Event через AddHandler.
Как из объекта этого класса узнать какие делегаты подписанны?  

Зачем? 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 26.7.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Не проблема перевести C# в VB.NET - был бы рефлектор  smile 

Код
  Me.SomeEvent = DirectCast(Delegate.Combine(Me.SomeEvent, New EventHandler(AddressOf Me.Test_SomeEvent)), EventHandler)
      Dim subscribers As Delegate() = Me.SomeEvent.GetInvocationList
      Dim subscriber As Delegate
      For Each subscriber In subscribers
            Console.WriteLine(subscriber.Method.Name)
      Next
 


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 26.7.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @  26.7.2006,  12:40 Найти цитируемый пост)
 Me.SomeEvent.GetInvocationList

Компилятор ругается на эту строчку, типа нельзы обратиться событию как к "объекту"  smile  
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 26.7.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Странно, а рефлектор именно так и выдал smile 


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 26.7.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Я как сделал:
Загнал C# в рефлектор, получил VB. 
А компилятор не пропустил smile
Получается это только ограничение компилятора VB smile  
PM MAIL WWW ICQ   Вверх
Exception
Дата 27.7.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Хм. А как ты событие объявляешь? Может, надо вместо
Код
Public Event MyEvent (params)
объявлять его как делегат:
Код
Public Delegate Sub MyEventHandler (params)
Public Event MyEvent As MyEventHandler
? 
PM   Вверх
arilou
Дата 27.7.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



ZUBR80, ответь на мой вопрос "Зачем это нужно" ?  

Это сообщение отредактировал(а) arilou - 27.7.2006, 13:09


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
ZUBR80
Дата 28.7.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



Это нужно чтобы делать кнопку активной, если на событие объекта кто-то подписан. 
PM MAIL   Вверх
arilou
Дата 28.7.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(ZUBR80 @  28.7.2006,  17:24 Найти цитируемый пост)
Это нужно чтобы делать кнопку активной, если на событие объекта кто-то подписан

Неужели нельзя сделать по-другому? События не предполагают того, что кто-то будет получать их обработчики. Это by design, как и то, что не должно быть зависимости от порядка вызова обработчиков. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.