Laden...

[gelöst] Event funktioniert nicht

Erstellt von Thomas B vor 11 Jahren Letzter Beitrag vor 11 Jahren 857 Views
T
Thomas B Themenstarter:in
223 Beiträge seit 2006
vor 11 Jahren
[gelöst] Event funktioniert nicht

Hallo Leute,

mein Event funktioniert nicht, und ich finde einfach nicht den Fehler. Es wird nicht ausgelöst. Befindet sich der Fehler im folgenden Code?


// Client Klasse
        public event EventHandler mMessageReceived;


        protected virtual void OnMessageReceived(EventArgs pEa)
        {
            EventHandler MyEvent = this.mMessageReceived;
            if (MyEvent != null)
                MyEvent (this, pEa);
        }

        public Client(Socket pSocket)
        {
            this.mSocket = pSocket;
            this.mStream = new NetworkStream(this.mSocket);
            this.mReader = new BinaryReader(this.mStream);
            this.mWriter = new BinaryWriter(this.mStream);

            if (this.mSocket.Connected)
            {
                this.mMessageReceiver = new Thread(ReadMessage);
                this.mMessageReceiver.Start();
            }
        }

// Feuert das Event und läuft in einem Thread
public void ReadMessage()
        {
            try
            {
                if (this.mSocket.Connected && this.mStream.DataAvailable)
                {
                    this.mMessages = this.mReader.ReadString();
                    this.OnMessageReceived(EventArgs.Empty);
                }
            }
            catch (Exception pEx)
            {
                throw new Exception("Fehler beim Lesen des Streams.", pEx);
            }
        }


// Server Klasse

// läuft in einem Thread und registriert den Event.
private void Watcher()
        {
            TcpListener Listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8888);

            try
            {
                Listener.Start();

                while (true)
                {
                    while (!Listener.Pending())
                        Thread.Sleep(200);

                    Client C = new Client(Listener.AcceptSocket());
                    C.mMessageReceived += new EventHandler(this.MessageReceivedFromClient);
                    this.mClients.Add(C);
                }
            }
            catch (Exception pEx)
            {
                throw new Exception("Fehler bei Verbindungserkennung", pEx);
            }
        }

// MessageBox erscheint nicht...
private void MessageReceivedFromClient(Object pSender, EventArgs pEa)
        {
            MessageBox.Show("Event");
            Client C = (Client)pSender;
            this.mRtbChat.Text += C.Messages + Environment.NewLine;
        }

S
417 Beiträge seit 2008
vor 11 Jahren

Hallo,

wie wärs mit Debugging?
Wird die Bedingung aus der ReadMessage überhaupt erfüllt?

P
992 Beiträge seit 2007
vor 11 Jahren

Wird denn die Methode OnMessageReceived() augerufen?
Ist MyEvent dann vielleicht null, weil der eventHandler noch nicht registriert ist?

T
Thomas B Themenstarter:in
223 Beiträge seit 2006
vor 11 Jahren

Hey,

ich habe den Debugger auf die Zeile "if (this.mSocket.Connected && this.mStream.DataAvailable)" gesetzt und der stoppt dort erstmal und zeigt, dass DataAvailable false ist. Das ist auch soweit korrekt, da ich noch nicht gesendet habe. Schickt der Client nun etwas, wird sofort true angezeigt, er springt ins Event und alles klappt...

Wird mein Thread irgendwie gekillt, sodass er nur einmal durchläuft? Ich bleib dran... 😕

Edit:
Das ein ein Programm einen Thread startet und in diesem Thread wieder ein Thread gestartet wird sollte kein Problem sein, oder?

Edit:
Es fehlt die While Scheife in ReadMessage Methode...