2011-02-15 8 views
0

私は2つの入力ボックスからユーザー名とパスワードを取るworkerthreadを持っていますが、ユーザー名/パスワードが空白の場合は停止したいと考えています。スレッドを停止/開始する方法は?

私はSuspend()メソッドを使用しようとしましたが、intellisensは古いものを通知します。どのようにスレッドを停止/開始するのですか?

+0

スレッドはどのようにユーザー名とパスワードを「取得」しますか?どのようにスレッドを開始するのですか?スレッドを開始できませんか? –

+1

もっと興味深いことに、これを行うためにスレッドを生成している理由は... –

+1

これまでのコードを表示できますか?それはおそらくあなたが達成したいことをより明確にするでしょう。 –

答えて

2

入力を得るためにスレッドが必要な理由はわかりませんが、ジョブが完了するたびにスレッドを戻すことでスレッドを停止する必要があります。あなたはただそれを殺すべきではありません。

if(!validInput(username, password)) 
    return; // et voila 

編集:あなたは(のようなJavaで通知/サスペンド/レジュームまたは待つ)以上のスレッドを同期しようとする場合は、MSDNからこの情報が役に立つことがあります。

ないThread.suspendはされています推奨されていません。 の他のクラスを使用してください。モニタ、 ミューテックス、イベント、セマフォなどのシステムを に同期させるか、 リソースを保護してください。 http://go.microsoft.com/fwlink/?linkid=14202

1

あなたがThread.Abort()メソッドを使用することができ、それが原因激しくスレッドを終了する一貫性のない共有状態につながることができます。より良い代替方法は、CancellationTokenを使用して共同終了を使用することです。

// Create a source on the manager side 
var source = new CancellationTokenSource(); 
var token = source.Token; 

var task = Task.Factory.StartNew(() => 
{ 
    // Give the token to the worker thread. 
    // The worker thread can check if the token has been cancelled 
    if (token.IsCancellationRequested) 
    return; 

    // Not cancelled, do work 
    ... 
}); 

// On the manager thread, you can cancel the worker thread by cancelling the source 
source.Cancel(); 
+1

Thread.Abort()は悪いです –

+0

なぜ彼はそれを@steve – atamanroman