多次启动线程

Posted

技术标签:

【中文标题】多次启动线程【英文标题】:Start Thread multiple times 【发布时间】:2021-11-29 13:47:06 【问题描述】:

我想使用线程将文件上传到服务器。

只要ThreadStateUnstarted,我就可以用ThreadName.Start()来启动线程。 代码完成后,ThreadState 将获得 Stopped。 如何重新启动该线程?

我的帖子是这样的:

public static Thread ThreadUploadFile = new Thread(() =>

    // Upload file
);

我通过以下方式调用线程:

private void UploadFile()

    ThreadUploadFile.Start();
);

【问题讨论】:

附带说明,任务比线程更方便。 var task = Task.Run(() => /* Upload file */ ); 也有可能,你根本不需要启动线程。这取决于您如何上传文件。也许有一些使用的类的异步方法。您上传的内容如何? 【参考方案1】:

你不能。

一旦线程停止,它就永远不能离开那个状态。 您必须初始化一个新实例并运行该新实例。

看 https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadstate?redirectedfrom=MSDN&view=net-5.0

我也找到了这张图片(我不确定它是否仍然 100% 正确)。

【讨论】:

线程池也可以用于类似目的 使用将使用线程池的任务【参考方案2】:

一旦线程停止,您将无法再次启动线程。 我建议将你的匿名方法变成一个真正的方法,并在每次开始之前创建一个新的线程。

【讨论】:

以上是关于多次启动线程的主要内容,如果未能解决你的问题,请参考以下文章

启动多个线程并重新启动它们

QProcess在启动多次后给出FailedToStart

线程的生命周期

java之多线程

为啥每个线程多次初始化惰性变量

补充知识点