Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3

Подписаться на событие загруженной Assembly

16.06.2011, 14:59. Показов 894. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не могу никак разобраться, прошу помощи

Дело в чём - загружаю сборку, состоящую из простой формочки с кнопкой и событием свою программу и пытаюсь подписаться на событие в этой сборке. Со всеми ексепшнами разобрался, вроде подписывается молча, но сама сборка не видит, что на событие кто-то подписался.

По-подробней, вот почти всё что есть в сборке:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public event EventHandler RestartNeededEvent;
 
public Form1()
{
    InitializeComponent();
}
private void button1_Click(object sender, System.EventArgs e)
{
        FireRestartNeededEvent();
    MessageBox.Show("Рас-рас....");
}
public void FireRestartNeededEvent()
{
        EventHandler handler = RestartNeededEvent;
        if (handler != null)
            handler(this, null);
}
Теперь программулина, которая эту сборку загружает и пытается подписаться на событие "RestartNeededEvent".
Вот код класса, который за это отвечает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public event EventHandler RestartNeeded;
public void Initialize()
{
    AssemblyContent = Assembly.LoadFrom(AssemblyPath);
    if (AssemblyContent != null)
    {                
        Type typeContent = AssemblyContent.GetType(ClassName); //ClassName - класс формы в сборке, сейчас это просто "Form1"
        object o = Activator.CreateInstance(typeContent);
        try
        {
               WireUp(o, "RestartNeededEvent", "FireRestartEvent");
 
               o.GetType().InvokeMember("Main", BindingFlags.Public |
                        BindingFlags.InvokeMethod | BindingFlags.Static, null, null, null);
        }
        catch (Exception e)
        {
        }
    }
}
void WireUp(object o, string eventname, string methodname)
{
    EventInfo ei = o.GetType().GetEvent(eventname);
    MethodInfo mi = this.GetType().GetMethod(methodname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
    EventHandler del = (EventHandler)Delegate.CreateDelegate(ei.EventHandlerType, this, mi);
    ei.AddEventHandler(o, del);
}
 
public void FireRestartEvent(object sender, EventArgs e)
{
    EventHandler handler = RestartNeeded;
    if (handler != null)
         handler(this, null);
}
Если поставить бп на строку EventHandler handler = RestartNeededEvent; в сборке, то handler всегда равен нулю, будто никто на него и не подписывался. В чём дело может быть? Или я что-то совсем неправильно делаю?))

Заранее благодарю всех за помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2011, 14:59
Ответы с готовыми решениями:

Подписаться на событие другого класса
class Table { ... this.ButtonChangedEvent += new EventHandler(ButtonChanged); ... public event EventHandler...

Не могу подписаться на событие
WPF (Не mvvm) public Program() { InitializeComponent(); Loaded += UserControl_Loaded; } ...

Как подписаться на событие
Доброго времени суток, cтоит задача при нажатии на кнопку формы с генерировать событие и отреагировать на него в другом классе. Событие я...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2011, 14:59
Помогаю со студенческими работами здесь

Как подписаться на событие CollectionView.CollectionChanged?
Уважаемые Гуру! Требуется при изменении CollectionView (в результате фильтрации или добавления/удаления элементов) показывать количество...

Циклом подписаться на событие с аргументом, на кнопочки по возрастанию
Возможно я плохо назвал тему, суть в чем, есть допустим 50 кнопок, но для примера будет 4, каждая имеет название начиная с FUNC_0 а дальше...

Как подписаться на событие нажатие кнопки мыши. Не важно по какому контролу, простой щелчек
В общем хочу перехватить событие простого нажатие кнопки мыши. Что нибудь типа Mouse.Click+=MouseClick.

Подписаться на событие
В базовом классе: public event EventHandler<BarcodeScanEventArgs> Scan; public abstract bool IsManualMode { get; set; } ...

Подписаться на событие изменения коллекции
Собственно как? Имеются такие коллекции List<string> scanUrls = new List<string>(); HashSet<string> resUrls = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru