2012-04-12 26 views
0

Ich versuche zum ersten Mal zu verwenden, Gewindeschneiden, und kam mit diesem:Zum ersten Mal multithreader

Thread myThread = new Thread(() => 
    { 
    test = Class1.getNumbers(param1, param 2); 
    MessageBox.Show(test.toString()); 
    }); 

Das ist für mich tut nichts though. Was habe ich falsch gemacht?

+4

Sie verpassen den Aufruf zu "Start". Versuchen Sie, 'myThread.Start()' hinzuzufügen, nachdem Sie 'myThread' definiert haben. –

+4

Sie versuchen, ein Meldungsfeld von einem Arbeitsthread anzuzeigen. UI-Elemente können nur im Hauptthread erstellt werden. –

+0

Zum Erlernen von Threading in der .NET-Plattform empfehle ich dringend, dies durchzulesen: http://www.yoda.arachsys.com/csharp/threads/index.shtml –

Antwort

3

Lesen Sie diesen free chapter from a very good book (ehrlich Stecker - kein inscentive hier):

Es ist consice und gibt Ihnen das Know-how Sie auf inkrementelle Weise wollen, so dass Sie zu schnell nicht zu hohen Pegel. Die Antwort Ihre Frage ist in den ersten paar Absätzen ...

+0

Vielleicht mache ich das falsch ... Ich möchte nur einen Fortschrittsbalken während der Ausführung einer Methode aktualisieren. – TheGateKeeper

+0

Wenn Sie keine Fragen über Threads geben, dann gehen Sie für http://StackOverflow.com/Questions/1259949/How-do-i-Implement-a-Progress-Bar-in-C –

+0

Dies ist, was ich brauchte . Ich muss natürlich mehr lernen, bevor ich das versuche! – TheGateKeeper

6

Sie haben den Thread nicht gestartet.

myThread.Start(); 

(Sie haben auch einen Syntaxfehler auf dem MessageBox Aufruf ...)

4

Ich versuche zum ersten Mal verwenden Threading

Versuchen mit dem Thema zu vermeiden Klasse direkt. Das wird selten benötigt.
Blick in:

  • Backgroundworker
  • Parallel Taskbibliothek
  • Thread

mehr oder weniger in dieser Reihenfolge.

Sie alle bieten Layer über Threading, um Ihnen zu helfen.

+0

Ich denke, in den Köpfen eines Anfängers könnte das verwirren, weil die Vermeidung der "Thread-Klasse" und die Vermeidung von "Multi Threading" verschieden sind, aber gleich klingen ... nur ein Gedanke - ein anderer Gedanke - es könnte ein schlechter sein Ding, um die Thread-Klasse entlang der gleichen Linien wie das Lernen von EF zu überspringen, ohne jemals rdbms/sql zu lernen ... (ich versuche nicht zu kritisieren, nur zu denken ..) –

+0

@Gabriel - Ich habe _directly_ in einem Schnitt hinzugefügt. –

+0

@Gabriel: Ja, eine gute Lernspur wäre es, den Thread in einer Konsolenanwendung zu verwenden. Und dann benutze die Bgw in WinForms. –

1

Sie müssen den Thread starten, indem Sie Start aufrufen.

Außerdem ist es wichtig zu beachten, dass MessageBox.Show Nachrichten pumpt. Deshalb funktioniert es richtig ohne einen expliziten Aufruf an Application.Run auf diesem Thread. Die meisten UI-Formulare und -Steuerelemente funktionieren jedoch nicht auf diese Weise. Versuchen Sie im Allgemeinen nicht, auf UI-Elemente eines Worker-Threads zuzugreifen oder diese zu erstellen.


A MessageBox technisch von einem anderen Thread als dem Haupt UI Thread arbeiten kann, aber es kann einige seltsame Probleme verursachen. Beispielsweise könnte dieses Meldungsfeld hinter einem modalen Dialogfeld stecken, das vom UI-Thread angezeigt wird. Aus diesem Grund wird unter anderem empfohlen, keine UI-Elemente von einem Worker-Thread anzuzeigen, selbst wenn dies mit selbstpumpenden Anrufen wie Form.ShowDialog oder MessageBox.Show geschieht.

Verwandte Themen