myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » invoke und eventproblem
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

invoke und eventproblem

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
myCSharp.de
Moderationshinweis von herbivore (24.03.2011 14:51):

Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank!
 
JAck30lena JAck30lena ist männlich
myCSharp.de-Team

avatar-2653.jpg


Dabei seit: 01.10.2006
Beiträge: 11.397
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.


JAck30lena ist offline

invoke und eventproblem

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich bin gerade dabei mir eine klassenbibliothek zu erstellen, welches mir den asynchronen einsatz von tcp_ip ermöglicht.

alles funktioniert bis auf die tatsache, das wenn ich ein event in der klasse auslöse, das dann der fehler:
Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on.
auftaucht.

dank forumssuche weiß ich jetzt das ich da mit invoke ranmuss.
jedoch weiß ich nicht wirklich wie, da die klasse in dem das event ausgelöst wird eine andere ist als die klasse die die werte benötigt.


ein beispiel:

C#-Code:
private Tcp_Ip_Server server;
        private Tcp_Ip_client client;

        private void Form1_Load(object sender, EventArgs e)
        {
            server = new Tcp_Ip_Server();
            server.start_listening("20000");
            server.Empfange_Daten += new Tcp_Ip_Server.Daten_Event(this.daten_da);
            client = new Tcp_Ip_client();
            client.connect_to("127.0.0.1","20000");
        }

        private void daten_da(object sender,daten_eventargs e)
        {
           this.Text = "server: " + e.message;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            client.send("test1");
        }

und hier ein ausschnitt aus der tcp_ip klasse mit dem eventhandler

C#-Code:
private string letzte_daten = "";
        public string str
        {
            set
            {
                letzte_daten = value;
                daten_eventargs e = new daten_eventargs(value);
                Empfange_Daten(this, e);
            }
            get
            {
                return letzte_daten;
            }
        }

        public delegate void Daten_Event(object sender, daten_eventargs e);
        public event Daten_Event Empfange_Daten;

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JAck30lena am 24.10.2006 09:21.

24.10.2006 09:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Friedel Friedel ist männlich
myCSharp.de-Mitglied

avatar-1931.jpg


Dabei seit: 19.08.2005
Beiträge: 830
Entwicklungsumgebung: Visual Studio .NET 2005
Herkunft: Nähe Kassel / Hessen


Friedel ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo JAck30lena,

eventuell sollte das helfen:

C#-Code:
private delegate void setTextAsyncDelegate(string message);

private void setTextAsync(string message)
{
   if(this.InvokeRequired)
      this.Invoke(new setTextAsyncDelegate(setTextAsync), new object[]{message});
   else
      this.Text = "server: " + message;
}

private void daten_da(object sender,daten_eventargs e)
{
   setTextAsync();
}

Ps.: evtl. nicht fehlerfrei, da ohne VS verfasst.

Gruss
Friedel
24.10.2006 09:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JAck30lena JAck30lena ist männlich
myCSharp.de-Team

avatar-2653.jpg


Dabei seit: 01.10.2006
Beiträge: 11.397
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.

Themenstarter Thema begonnen von JAck30lena

JAck30lena ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

achso.. jetzt habe ich es endlich verstanden..

vielen dank



edit: fehler im beispielcode korrigiert:

C#-Code:
private delegate void setTextAsyncDelegate(string message);

private void setTextAsync(string message)
{
   if(this.InvokeRequired)
      this.Invoke(new setTextAsyncDelegate(setTextAsync), new object[]{message});
   else
      this.Text = "server: " + message;
}

private void daten_da(object sender,daten_eventargs e)
{
   setTextAsync(e.Message);
}

(der übergabeparameter war nicht gesetzt)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JAck30lena am 22.02.2008 15:14.

24.10.2006 10:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 13 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.08.2020 19:54