Thread myThread = new Thread(MyThreadFunction); myThread.Start(); // 检测线程是否结束 while (myThread.ThreadState != ThreadState.Stopped) { // 线程还在运行 // 可以在这里进行其他操作 } Debug.Log("线程结束"); 这么些会阻塞当前线程,如何在不阻塞情况下判定线程是否结束
时间: 2024-02-27 20:56:29 浏览: 77
判断Threading.start新线程是否执行完毕的实例
如果不想阻塞当前线程来判断线程是否结束,可以使用C#的Task类来实现异步等待线程结束。Task类是C# 5.0中引入的,用于实现异步编程模式。Task类封装了异步操作的结果,可以通过等待Task完成来获取异步操作的结果。
可以使用Task.Factory.StartNew方法来创建一个异步任务,然后使用Task.Wait方法来等待任务完成,如下所示:
```
Task myTask = Task.Factory.StartNew(MyThreadFunction);
// 等待任务完成
while (!myTask.IsCompleted)
{
// 任务还在运行
// 可以在这里进行其他操作
}
Debug.Log("线程结束");
```
其中,MyThreadFunction是自定义的线程函数。Task.Factory.StartNew方法会创建一个异步任务,并自动启动该任务。while循环中,通过myTask.IsCompleted属性来判断任务是否完成,如果完成则跳出循环。循环结束后,Debug.Log("线程结束")会被执行。
需要注意的是,如果在主线程中等待异步任务完成时还有其他操作,例如更新UI等,可以使用Task.WaitAll方法同时等待多个任务完成。同时,需要确保异步任务不会访问主线程对象,否则可能会导致线程死锁。
阅读全文