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
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
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.
der code den du gepostet hast funktioniert. der fehler muss woanders liegen
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!"
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.
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
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.....
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...
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
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