我正在用 C# 开发服务器。我有一个接口,所有主要的网络工作都在一个单独的线程中完成。我管理服务器状态并注意连接的客户端的接口。
本质。
有一个线程负责网络交互:
static Thread listener = new Thread(() =>
{
while (currentStatus == Status.on)
{
// some work
}
});
如您所见,它仅在currentStatus == Status.on
. currentStatus
我用界面按钮改变了这个。在启动时,即 当currentStatus
它变成Status.on
我启动线程时listener.Start()
。
当我关闭服务器时,即 当currentStatus
它变成 时Status.off
,线程已经计算出它的代码并传递出去。
将来,如果我需要再次启动服务器,线程会抛出ThreadStateException: 'Поток выполняется или прерван; его нельзя запустить повторно.'
它摧毁了我的大脑,因为 在我的理解中,完成的线程必须进入可以再次启动的状态。
所以,亲爱的匿名者,问题是:
重新启动线程的最简单方法是什么?
从文档(托管线程状态):
此外,您可以阅读 Thread States。原文:ThreadState。
死意味着死......如果你需要启动一个新线程,然后创建一个新线程。
您不需要重新启动线程,您需要这样做:
如果需要运行内部循环,只需调用:
如果一个线程在一条线上
evt.WaitOne();
,它消耗的 CPU 资源大约为零。在这种情况下,最好将线程标记为子线程
IsBackground = true
(