2009-08-21 5 views
5

私はこのメッセージを得続けるスレッドを作成する際に役立つ、C#のWinFormsのWinFormsでスレッドを作成するには?

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

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

が必要になります。

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

MSDNドキュメントをどうするかは全く良い

答えて

14

これは動作します:

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

そして、これは同様に動作します:

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

MSDNのドキュメントには良いと正しいですが、あなたは間違ってそれをやっています。 :) あなたがこれを行う:だから

​​

を、あなたは実際にここに何をすべきか、Threadオブジェクトに(無効である)スタート()メソッドによって返されたオブジェクトを割り当てようとされます。したがって、エラーメッセージ。

+2

、MSDNのドキュメントは 'スタート()'の戻り値の型がvoidであることを示している... –

2

のようにそれを分割してみませんですそのようなもの:

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(); 
} 

Thread.Start - メソッドはvoidを返します。何もしない)ので、あなたは

Thread t = something.Start(); 

を書くとき、あなたは-variable tに、無効であるStart -method、結果を設定しようとしています。これは不可能なので、上記のように文を2行に分割する必要があります。

2

.NETフレームワークには、便利なスレッドクラスBackgroundWorkerも用意されています。 VisualEditorを使ってそれを追加し、そのすべてのプロパティを設定できるのでいいです。ここで

はBackgroundWorkerのを使用する方法について(画像付き)素敵な小さなチュートリアルです:特に http://dotnetperls.com/backgroundworker

+1

Iその提案を2番目にする必要があります。 BackgroundWorkerのアプローチは、Threadを使用するよりはるかに初心者に優しいです。また、UIスレッドとワーカースレッドの間でデータをマーシャリングするのに役立ちます。 –

関連する問題