如何停止/启动线程?

时间:2011-02-15 13:13:48

标签: c# multithreading

我有一个workerthread,它从两个输入框中获取用户名和密码,但如果用户名/密码为空,我想停止它。

我试过使用Suspend()方法但是intellisens告诉我它已经过时了。我如何停止/开始一个线程?

2 个答案:

答案 0 :(得分:2)

我不明白为什么你需要一个线程来获取输入,但是你应该在作业完成后通过返回来停止一个线程。你不应该只是杀了它。

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

编辑:如果你试图同步更多的线程(比如java中的suspend / resume或wait / notify),那么来自msdn的这些信息可能会有用:

  

Thread.Suspend已被弃用。   请使用其他课程   System.Threading,例如Monitor,   Mutex,Event和Semaphore,to   同步线程或保护   资源。   http://go.microsoft.com/fwlink/?linkid=14202

答案 1 :(得分: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();