Gewusst wie: veröffentlichen und abonnieren von events in verschiedenen Klassen
Ziel: Zu ändern, ein Bild auf einem Formular, wenn entweder udp oder tcp verwendet die send-Methode
Problem: ich habe keine Ahnung, wie man das event, Event-Handler und die Delegierten ordnungsgemäß eingerichtet
Senden-Schnittstelle
interface ISendData
{
void Send();
}
Tcp-Verbindung-Klasse
//Need some type of delegate??
public class TCPconnection : ISendData
{
void Send()
{
//how invoke/fire a send Event?
}
}
UDP-Verbindung-Klasse
//Need some type of delegate??
public class UDPConnection : ISendData
{
void Send()
{
//how invoke/fire a send event?
}
}
der winform -, die 'sollte' abonnieren, um zu sehen, die gefeuerten events
public class myForm
{
private DataWatcher datawatcher = new DataWatcher();
private Image statusIndicator = null;
public myform()
{
initComponents();
datawatcher.DataSendActive += new DataWatcherSendHandler(DataSending);
datawatcher.DataSendInactive += new DataWatcherSendHandler(NoDataSending);
}
public void DataSending(object sender, DataWatcherArgs e)
{
statusIndicator = Properties.resources.greenLight;
}
public void NoDataSending(object sender, DataWatcherArgs e)
{
statusIndicator = Properties.resources.redLight;
}
}
Das Event/Event-handler?? Aber ich habe wirklich keine Ahnung, was ich hier mache diese Arbeit zu machen
public delegate void EventHandler(object sender, EventArgs e);
class DataWatcher
{
public event EventHandler DataSendActive;
public event EventHandler DataSendInactive;
protected virtual void onDataSendActive(System.EventArgs e)
{
if (DataSendActive != null)
{
DataSendActive(this, e);
}
}
protected virtual void onDataSendInactive(System.EventArgs e)
{
if (DataSendInactive != null)
{
DataSendInactive(this, e);
}
}
}
- Können Sie das bitte erklären ? Als ich es gelesen habe, Sie wollen, um das Bild zu ändern, wenn irgendein Teil der Anwendung beginnt mit dem senden/hochladen von Daten. Ist das richtig ?
- Ja, dass ist genau das richtige.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es viele Konventionen, dies zu tun. Hier ist meine kleine Umsetzung.
Nun die TcpConnection-Klasse implementieren diese.
Hier ist das setup für Ihre Form.
Hoffe, das hilft.
Form
Konstruktor wird die Instanz derIDataTransferManager
übergeben werden sollen, in den Konstruktor. Ich schrieb das Beispiel mit Dependency Injection-Muster in den Sinn. Obwohl Sie sind frei, alle anderen Muster. Wie Sie sagen, IhreForm
'hängt' auf, die jemals erzeugt es eine Instanz derIDataTransferManager
. So haben Sie die Entwicklung der Anwendung in einer Weise, so dass der Aufrufer derForm
Konstruktor kennt und liefert die Instanz.Hier ist ein einfaches Beispiel, wie Sie umsetzen konnte ein Ereignis für das senden und nicht senden, abonnieren und es
Dies ist, wie Sie es in einer Konsum-Programm