我有一个workerthread,它从两个输入框中获取用户名和密码,但如果用户名/密码为空,我想停止它。
我试过使用Suspend()方法但是intellisens告诉我它已经过时了。我如何停止/开始一个线程?
答案 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();