如何在C#.Net 4.0中重新启动线程?

如何在C#.Net 4.0中重新启动线程?,c#,multithreading,.net-4.0,C#,Multithreading,.net 4.0,我在VS2010中使用的是C#.Net4.0。 如何重新启动线程 这就好像我想Abort()线程,然后Start()从头再开始? 可能吗?中止线程通常是个坏主意。他是一位顾问。如果它是一个无限循环,一个布尔值用于停止线程而不终止 bool run = true; Thread thread = new Thread(method); thread.start(); private void method() { while(run) { } } 要停止线程,只需将布尔值设置为f

我在VS2010中使用的是C#.Net4.0。 如何重新启动
线程

这就好像我想
Abort()
线程,然后
Start()
从头再开始?
可能吗?

中止线程通常是个坏主意。他是一位顾问。如果它是一个无限循环,一个布尔值用于停止线程而不终止

bool run = true;
Thread thread = new Thread(method);
thread.start();

private void method()
{
  while(run)
  {

  }
}

要停止线程,只需将布尔值设置为false,通常可以稍后重新启动。

thread.Abort不保证线程将终止。例如,如果您有一个长时间运行的查询,Abort将不会终止查询的执行或线程的取消。事实上,该线程将一直存在,直到查询完成

如果您在托管代码中执行所有操作,并且没有被非托管资源锁定,并且必须中止线程,则thread.abort()完全可以


但是,不能对已终止的线程调用Start。您必须创建另一个线程并在该线程上调用Start。在.NET中(与其他语言相比),线程创建在内存方面有点昂贵,因此存在一些缺点

当您想要从头开始重新启动线程时,实际上您想要在线程上重新启动特定函数(代码流)的执行。创建线程并传递函数以执行时,一旦函数完成自身的执行,线程的生命周期就会终止。您只需要更改代码设计,以允许通过重新创建新线程来重新启动函数。
但对于简短的函数,我建议使用。

因为您使用的是.NET 4.0,MS在其中引入了“协作取消框架”。你可以从这里读到更多。
不鼓励直接处理线程。

创建新的线程实例并再次执行。 thread1=新线程();
thread1.start()

通常,
Abort()
ing线程是个坏主意。你想解决什么问题?这可能会帮助你:-[在C#4.0][1][1中重新启动线程]:停止和启动线程的要求有点不寻常-你试图解决的问题是什么?我有一个服务器线程,它首先初始化套接字,然后反复接受传入连接。。。我们可以关闭服务器,从而关闭它正在使用的套接字并中止线程。。。现在,如果我想再次启动服务器,我需要线程函数再次运行…好建议<代码>运行< /代码>应该是代码> Value,以避免由于编译器优化而造成的无限等待。请考虑使用<代码>锁> />代码,特别是在设置布尔值时。更好的是,将它与
监视器
结合使用。看看这里:我的线程函数在单击创建服务器时启动。它执行一些初始化,然后进入包含socket.Accept()的无限循环。控件被此语句卡住,因此我无法使用此锁定方法。@YS.:在.NET中读取或写入布尔值保证是原子的。因此,不需要锁或监视器。锁==监视器。一次又一次地查看或实际创建线程不会太昂贵,因为这样做不会太频繁。