Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Methode, die in TextBox schreibt, funktioniert nicht, wenn sie in einem extra Thread ausgeführt wird
PC17
myCSharp.de - Member



Dabei seit:
Beiträge: 86

Themenstarter:

Methode, die in TextBox schreibt, funktioniert nicht, wenn sie in einem extra Thread ausgeführt wird

beantworten | zitieren | melden

Hallo

Was mache ich hier falsch?
Rufe so die Methode Test(); in einem neuen Thread auf.
Wenn ich die Methode in ganz normal mit test(); aufrufe läuft es. Aber wenn ich es in einem neuen Thread mache läuft es nicht. Ich habe es mit MessageBoxen schon ausprobiert wo es berall hinkommt und es wird mir jede Messagbox angezeigt, so weit wäre eig alles ok.

p

rivate void btnstart_Click(object sender, EventArgs e)
        {
            
            ThreadStart a;
            a = new ThreadStart(test);
            Thread firstThread = new Thread(a);
            firstThread.Start();
        }

Methode Test:

private void test()
          {
             try
              {
                ....

MfG PC17
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von PC17 am .
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo PC17,

was genau läuft nicht? Bitte beschreibe dein Problem genau, so können wir nur raten.
Wenn du versuchst, in der Methode test auf Controls des Fensters zuzugreifen, schlägt der Zugriff fehl, da nur der Thread, der die Controls erzeugt hat, auf diese zugreifen kann.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
PC17
myCSharp.de - Member



Dabei seit:
Beiträge: 86

Themenstarter:

beantworten | zitieren | melden

Es kommt keine Fehlermeldung nichts es wird einfach nicht ausgeführt wenn ich dann auf den Button clicke.
Wenn ich nur die Methode test(); aufrufe geht es aber in einem eigenen Thread das ich nebenbei was anderes machen kann geht nicht.
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

der code den du gepostet hast funktioniert. der fehler muss woanders liegen
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7547
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

als Hinweis: Verwende besser ThreadPool.QueuUserWorkItem, denn so werden Threads aus dem Pool verwendet und nicht ein neuer Thread erzeugt da dies eine kostpielige (und oft unnötige) Aktion ist.

Bei C# 4.0 kann stattdessen auch Task.Factory.StartNew verwendet werden. Dabei werden (standardmäßig) auch Threads aus dem Pool verwendet.


mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
PC17
myCSharp.de - Member



Dabei seit:
Beiträge: 86

Themenstarter:

beantworten | zitieren | melden

Also stimmt es vom Prinzip her?
Müsste also die Methode ausgeführt werde und ich könnte nebenbei auch auf einen Button klicken der eine Messagebox kommen lässt?

Edit: @gfoidl:
Ist das ein gutes Beispiel dafür?
http://thevalerios.net/matt/2008/05/use-threadpoolqueueuserworkitem-with-anonymous-types/
Darf ich fragen wie der Code dann ausschaut wenn ich es mit
ThreadPool.QueueUserWorkItem mache? Das sagt mir nicht viel.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von PC17 am .
private Nachricht | Beiträge des Benutzers
Kaji
myCSharp.de - Member



Dabei seit:
Beiträge: 602
Herkunft: Clausthal-Zellerfeld

beantworten | zitieren | melden

Hallo PC17,

ich vermute wie m0rius auch schon das du in deiner Methode auf deine Form zugreifen willst, bzw Messageboxen oder ähnliches anzeigen willst. Das geht so nicht. Kannst du uns daher sagen WAS in deiner Test Methode passiert?


Viele Grüße,

Kaji
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

ichvermute mal das schin in den ersten zeilen des try{ blockes schon die exception kommt UND das im catch block noch eine kommt... aber das ist aufgrund der informationsarmut auch nur vermutet.

edit: debugge das ganze doch einfach. setze einen breakpoint da rein oder schalte alle exceptions scharf und klick auf den button.....
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal am .
PC17
myCSharp.de - Member



Dabei seit:
Beiträge: 86

Themenstarter:

beantworten | zitieren | melden

Es wird ein IP scanner das ich sehe welche IP gerade bei mir online sind.
In der Methode test werden die IP angepingt das alles geschieht in einer in einer Schleife. Die IP´s die er findet werden dann in eine tb geschrieben

Edit: @JAck30lena: Muss da nicht trotzdem eine Fehlermeldung kommen?
Ich habe es mit Breakpoint schon ausprobiert wie weit ich komme und ich komme in jede Zeile beim Thread öffnen...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von PC17 am .
private Nachricht | Beiträge des Benutzers
Kaji
myCSharp.de - Member



Dabei seit:
Beiträge: 602
Herkunft: Clausthal-Zellerfeld

beantworten | zitieren | melden

Hallo PC17,

und du wunderst dich jetzt das die Ergebnisse nicht in der TB ankommen? Na das liegt doch auf der Hand. Du kannst nicht einfach von einem Thread auf deine Forms zugreifen und deine TB befüllen. Du musst eine Referenz übergeben und kannst dann über Invoke auf deine TB zugreifen.

Übrigens stimmt JAck30lena`s vermutung wohl auch das wenn du das try catch weglässt eine mehr oder weniger sinnvolle Fehlermeldung kommt.


Viele Grüße,

Kaji
private Nachricht | Beiträge des Benutzers
chavez
myCSharp.de - Member



Dabei seit:
Beiträge: 257
Herkunft: Österreich

beantworten | zitieren | melden

Bitte keine Crossposts
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo PC17,

das ist nun schon der x-te-Thread, den du auch in mindestens einem anderen Forum gepostet hast. Ich erwarte von dir, dass sich das nicht noch mal wieder holt und dass du ab jetzt [Hinweis] Wie poste ich richtig? Punkt 2.2 beachtest ==> geschlossen.

herbivore
private Nachricht | Beiträge des Benutzers