У меня есть три класса, один класс загружает файл конфигурации в память для последующего доступа. Мой другой класс - основная форма. Я пытаюсь добиться того, чтобы при загрузке определенных элементов класса конфигурации они добавлялись в представление списка в графическом интерфейсе (WindowsForm).
Я знаю, что вы не можете получить доступ к графическому интерфейсу напрямую из других классов, не относящихся к основной форме, что после чтения я не хочу делать в любом случае, поэтому я пытался вызвать события, чтобы сказать "config updated", что основная форма будет прослушивать и обновлять просмотр списка, когда это необходимо. Поэтому я создал третий класс, который определяет события, делегаты и т. Д., Но во всех примерах, которые я видел, если разные классы вызывают событие, им всем передается общий экземпляр класса события.
Так я должен поступать? Когда я создал класс конфигурации из класса mainform, я должен передать экземпляр класса события? Или есть способ для двух классов, которые ничего не знают друг о друге, поделиться событием?
Я изменил приведенный ниже пример для Microsoft, чтобы продемонстрировать, что мне нужно.
using System;
public class FireEventArgs : EventArgs
{
public FireEventArgs(string room, int ferocity)
{
this.room = room;
this.ferocity = ferocity;
}
public string room;
public int ferocity;
}
public class FireAlarm
{
public delegate void FireEventHandler(object sender, FireEventArgs fe);
public event FireEventHandler FireEvent;
public void ActivateFireAlarm(string room, int ferocity)
{
FireEventArgs fireArgs = new FireEventArgs(room, ferocity);
if(FireEvent!=null)FireEvent(this, fireArgs);
}
}
public class FireEventTest
{
public static void ExtinguishFire(object sender, FireEventArgs fe)
{
Console.WriteLine("\nThe ExtinguishFire function was called by {0}.", sender.ToString());
if (fe.ferocity < 2)
Console.WriteLine("This fire in the {0} is no problem. I'm going to pour some water on it.", fe.room);
else if (fe.ferocity < 5)
Console.WriteLine("I'm using FireExtinguisher to put out the fire in the {0}.", fe.room);
else
Console.WriteLine("The fire in the {0} is out of control. I'm calling the fire department!", fe.room);
}
public static void Main()
{
FireAlarm myFireAlarm = new FireAlarm();
FireAlarm fireAlarm = new FireAlarm();
fireAlarm.FireEvent += new FireAlarm.FireEventHandler(ExtinguishFire);
myFireAlarm.ActivateFireAlarm("Kitchen", 3);
myFireAlarm.ActivateFireAlarm("Study", 1);
myFireAlarm.ActivateFireAlarm("Porch", 5);
return;
}
}
Заранее спасибо за любую помощь.