所以我对C#还是比较新的。 到目前为止,我想知道如何检查一个线程是否已经结束。我知道我可以在线程使用的方法结束时放一个bool并使用它来确定线程是否结束..但我不想这样做,主要是因为我想学习正确的方法 到目前为止,我有这个。
Thread testThreadd = new Thread(Testmethod);
testThreadd.Start();
testThreadd.Join();
我读到了关于thread.join();类。据我所知,该类只能阻止执行后的任何代码..请帮助。 感谢
答案 0 :(得分:1)
您可以查看Thread.IsAlive属性。
答案 1 :(得分:1)
有不同的方法可以产生不同的结果 1)等到工作完成。这正是您已经使用代码所拥有的。你将启动一个线程,然后在继续执行之前等待该线程完成。
thread.Start();
thread.Join();
2)thread.ThreadState会告诉你线程是否已经完成。在基本方案中,您可以执行以下操作。这将允许您在代码中您可以访问该状态的任何位置检查当前线程状态。
if(thread.ThreadState != ThreadState.Running){
// Thread has stopped
} 3)使用事件。许多异步示例将启动一些工作,然后在工作完成后触发事件。通过这种方式,您可以坐下来观看活动,并在工作完成后做出回应。用法示例可能类似于WebClient类
WebClient client = new WebClient();
client.DownloadFileCompleted += new
AsyncCompletedEventHandler(client_DownloadFileCompleted);
答案 2 :(得分:1)
您尝试的是等待线程完成的正确方法。但是:
Thread.Join()
是Thread
class。Join()
函数(在样本testThreadd
中)将使当前线程等到testThreadd
完成它的工作。当前线程是调用testThreadd.Join()
答案 3 :(得分:0)
除了提供的答案,现在最常用的方法是使用Tasks。除了拥有所有Wait和IsCompleted的可能性之外,这些还具有ContinueWith方法的附加优势
开始一项任务
var task = Task.Run((Action)TestMethod);
检查完成
if (task.IsCompleted) { }
等待任务完成(与thread.sleep相同)
task.Wait();
设置一个continuewith(任务完成后要启动的附加任务)
var task = new Task((Action)TestMethod);
task.ContinueWith(t => MessageBox.Show("Finished"));
task.Start();
并合并,等待继续任务完成(这自动意味着,第一个任务完成)
var task = new Task((Action)TestMethod);
var continuedtask = task.ContinueWith(t => MessageBox.Show("Finished"));
task.Start();
continuedtask.Wait();
答案 4 :(得分:-1)
您可以使用BackgroundWorker而不是手动启动新主题。如果它的工作完成(或发生异常),它会引发RunWorkerCompleted
事件。