2009-08-21 15 views
5

Potrzebuję pomocy w tworzeniu wątku, C# WinFormsJak utworzyć wątek w WinForms?

private void button1_Click(object sender, EventArgs e) { 
    Thread t=new Thread(new ThreadStart(Start)).Start(); 
} 

public void Start() { 
    MessageBox.Show("Thread Running"); 
} 

Wciąż dostaję komunikat:

Cannot implicitly convert type 'void' to 'System.Threading.Thread 

co robić w dokumentacji MSDN nie jest dobre

Odpowiedz

14

to będzie działać:

Thread t = new Thread (new ThreadStart (Start)); 
t.Start(); 

A to będzie działać jak dobrze:

new Thread (new ThreadStart(Start)).Start(); 

dokumentacji MSDN jest dobre i słuszne, ale robisz to źle. :) to zrobić:

Thread t = new Thread (new ThreadStart(Start)).Start(); 

Więc, co tu robisz w rzeczywistości jest próbować przypisać obiekt, który jest zwracany przez metodę start() (co jest nieważne) do obiektu wątku; stąd komunikat o błędzie.

+2

w szczególności dokumentacji MSDN wskazuje, że typ zwrot 'start()' jest nieważna ... –

2

spróbuj podzielić go jako takie:

private void button1_Click(object sender, EventArgs e) 
{ 
    // create instance of thread, and store it in the t-variable: 
    Thread t = new Thread(new ThreadStart(Start)); 
    // start the thread using the t-variable: 
    t.Start(); 
} 

The Thread.Start - metoda zwraca void (tj. nic), więc kiedy piszesz

Thread t = something.Start(); 

próbujesz ustawić wynik Start -method, które jest nieważne, do t -variable. Nie jest to możliwe, więc musisz podzielić instrukcję na dwie linie, jak podano powyżej.

2

Platforma .NET zapewnia również przydatną klasę wątków BackgroundWorker. To miłe, ponieważ można go dodać za pomocą VisualEditor i ustawić wszystkie jego właściwości.

Oto mały poradnik ładny (ze zdjęciami), jak używać BackgroundWorker: http://dotnetperls.com/backgroundworker

+1

I Musiałbym dodać tę sugestię. Podejście BackgroundWorker jest o wiele bardziej przyjazne dla początkujących niż używanie Thread. Pomaga także w zarządzaniu danymi między wątkiem interfejsu a wątkiem roboczym. –