Laden...

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

Erstellt von PC17 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.350 Views
Thema geschlossen
P
PC17 Themenstarter:in
73 Beiträge seit 2009
vor 13 Jahren
Methode, die in TextBox schreibt, funktioniert nicht, wenn sie in einem extra Thread ausgeführt wird

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

1.002 Beiträge seit 2007
vor 13 Jahren

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

P
PC17 Themenstarter:in
73 Beiträge seit 2009
vor 13 Jahren

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.

Gelöschter Account
vor 13 Jahren

der code den du gepostet hast funktioniert. der fehler muss woanders liegen

6.911 Beiträge seit 2009
vor 13 Jahren

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!"

P
PC17 Themenstarter:in
73 Beiträge seit 2009
vor 13 Jahren

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.

K
593 Beiträge seit 2007
vor 13 Jahren

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

Gelöschter Account
vor 13 Jahren

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.....

P
PC17 Themenstarter:in
73 Beiträge seit 2009
vor 13 Jahren

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...

K
593 Beiträge seit 2007
vor 13 Jahren

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

C
252 Beiträge seit 2007
vor 13 Jahren

Bitte keine Crossposts

49.485 Beiträge seit 2005
vor 13 Jahren

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

Thema geschlossen