Zum Inhalt springen

Event C# .net 2.0


Babybaer

Empfohlene Beiträge

Hallo Leutz,

ich habe eine Form, aus der Form erzeuge ich ein Obj dass auf eine Nachricht von einem Serivce per TCP warte. Jetzt habe ich mir eine Event geschrieben das ausgelöst werden soll, sobald eine Nachricht eintrifft. Soweit noch alles klar. Event wird auch ausgelöst... Aber dann bekommt ich diesen Fehler:

Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement lbMessage erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

Warum verstehe ich auch... Nur keine Ahnung wie ich das in den Griff bekomme. Eine Einfache Erklärung würde bestimmt schon helfen.

Form Class


private void StartClient()
{
rc = new RemotingClient.RemoteClient();
rc.event_IncomingMessage += new RemotingClient.IncomingMessageDelegate(this.OnIncomingMessage);
rc.StartListen();
}

public void OnIncomingMessage( string strMessage )
{
//hier kommt der Fehler...
lbMessage.Items.Add(strMessage);
}
[/PHP]

Hier der Code aus dem RemoteClient

[PHP]

public delegate void IncomingMessageDelegate( string strMessage );

public class RemoteClient
{

public event IncomingMessageDelegate event_IncomingMessage;

public RemoteClient()
{
}
....

....

Remotable.StructResponse OnServerEvent(Remotable.StructAction structAction)
{
...

this.event_IncomingMessage(strMessage);
...
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi. Dein TCP Reader arbeitet asnychron, also in einem eigenen Thread. Wenn dieser Thread jetzt dein Main-Form manipulieren würde, könnte das unvorhersehbare Folgen haben da du nicht weißt in welchem Zustand sich das Form befindet, bzw. welche Threads im Moment auch noch Änderungen vornehmen.

Deswegen darf nur der Thread auf Windows Forms Komponenten zugreifen, der auch der Eigentümer dieser Komponenten ist. Eine mögliche Lösung findest du auf meinem Blog:

.NET 2.0 : Ansynchroner Datenbankzugriff mit .NET 2.0

Hier mache ich eine asynchronen Datenbankabfrage und gebe das Ergebnis zurück an das MainForm.

Link zu diesem Kommentar
Auf anderen Seiten teilen

.NET 1.1 : Ansynchroner Aufruf? Vielleicht ist das ja dasselbe Problem?

Habe in meiner Dlg-Class einen FileSystemWatcher laufen. Dieser wird auch ausgelöst und startet danach eine Funktion in der eine RAS Verbindung aufbaut und verschiedene Informationen an den Dialog übergibt.

Über den Button 'Verbinden' löse ich dieselbe Aktion aus mit dem gewünschten Erfolg. Aber bei dem FileSystemWatcher Event bekomme ich nur sporadisch den gewünschten Effekt. Jemand eine Idee was das sein könnte?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Doch der Watcher löst aus. Aber die Verbindung in der RAS kommt nicht immer zu stande. Die Verbindung wird irgendwie schon aufgebaut nur bekomme ich von der RAS Falsche Events und Infos zurück. Ist da ein Unterschied vorhanden??? ob ich jetzt auf dem Dlg den Button klicke und ein Event auslöse oder ob der FileWatcher die Aktion auslöst...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...