Babybaer Geschrieben 15. Februar 2008 Teilen Geschrieben 15. Februar 2008 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); ... } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 15. Februar 2008 Teilen Geschrieben 15. Februar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 15. Februar 2008 Teilen Geschrieben 15. Februar 2008 Die Lösung lautet Invoke. protected void DisplayResult(string text) { if (m_Grid.InvokeRequired) { m_Grid.Invoke(new DisplayResultDelegate(DisplayResult), text); } else { m_Grid.Rows.Add(new Row(text)); } } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Babybaer Geschrieben 15. Februar 2008 Autor Teilen Geschrieben 15. Februar 2008 Hammer danke danke :upps Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Babybaer Geschrieben 19. Februar 2008 Autor Teilen Geschrieben 19. Februar 2008 .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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 19. Februar 2008 Teilen Geschrieben 19. Februar 2008 Was ist denn der gewünschte Effekt? Löst der Watcher nicht aus oder was passiert? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Babybaer Geschrieben 19. Februar 2008 Autor Teilen Geschrieben 19. Februar 2008 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 19. Februar 2008 Teilen Geschrieben 19. Februar 2008 Ja, das ist schon ein Unterschied. Aber aus diesem Watcher-Event wird ja nur die RAS Verbindung aufgebaut und vermutlich nichts mit deiner GUI gemacht, oder? Man müsste den Code mal sehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Babybaer Geschrieben 19. Februar 2008 Autor Teilen Geschrieben 19. Februar 2008 Ich sende an ein Label Text und Disable die Button... Das tut ja auch. Nur die Verbindung verhält sich anders Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 19. Februar 2008 Teilen Geschrieben 19. Februar 2008 Die Verbindung sollte sich dann nicht anders verhalten. Es sein denn du initiierst die Verbindung durch einen Methodenaufruf eines Controls. Wie gesagt, man müsste den Code sehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Babybaer Geschrieben 25. Februar 2008 Autor Teilen Geschrieben 25. Februar 2008 Also ich habe den Fehler gefunden. Ich hatte... wie auch immer 2 EventHandler laufen. Also habe ich gleich 2 mal dieselbe eine Nachricht erhalten, das dann die Ras etwas durcheinander gebracht hat... THX Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.