所以我还是C#的新手。我正在学习线程。
到目前为止,我想知道如何检查线程是否已经结束。我知道我可以在线程使用的方法结束时放一个bool并使用它来确定线程是否结束..但我不想这样做,主要是因为我想学习正确的方法
到目前为止,我有这个。Thread testThreadd = new Thread(Testmethod);
testThreadd.Start();
testThreadd.Join();
我读到了关于thread.join();类。根据我的理解,该类仅阻止执行后的任何代码..请帮助
答案 0 :(得分:4)
有不同的方法可以产生不同的结果
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);
答案 1 :(得分:1)
Thread.Join
方法暂停当前线程执行,直到第二个线程完成。它用于线程同步,它是足够好的指标。
否则,您应该使用Thread.IsAlive
属性来检查线程是否在运行而不中断当前线程。此属性涵盖Thread.Start
与线程结束之间的任何状态。
答案 2 :(得分:1)
Thread.Join()
阻止你调用它的线程,直到你调用Join()
的线程返回为止。扩展上面的示例:
Thread testThreadd = new Thread(Testmethod);
testThreadd.Start();
testThreadd.Join();
//Do more stuff here. This stuff will not start until testThreadd has completed its work.
答案 3 :(得分:1)
你可以这样做
public partial class MainWindow : Window
{
Thread testThreadd;
public MainWindow()
{
InitializeComponent();
testThreadd = new Thread(Testmethod);
testThreadd.Start();
testThreadd.Join();
}
public void Testmethod()
{
// begining your treatement
// Ending your treatement
this.testThreadd.Abort();
}
}