繁体   English   中英

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

[英]How to restart a Thread in C# .Net 4.0?

我在VS 2010中使用C#.Net4.0。如何重新启动Thread

它就像我想Start() Abort()线程和Start()它一样? 可能吗?

中止线程通常是个坏主意。 他是顾问。 如果它是一个无限循环,则一个布尔值用于在没有堕胎的情况下停止线程。

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

private void method()
{
  while(run)
  {

  }
}

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

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

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

如果您在托管代码中执行所有操作并且未被非托管资源锁定,并且您必须中止某个线程,则thread.Abort()完全没问题。

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

当你想从头开始重新启动线程时,你实际上想要重新启动线程上某个函数(代码流)的执行。 当您创建一个线程并传递一个执行函数时,一旦该函数完成自己的执行,线程的生命就会终止。 您只需更改代码设计即可通过重新创建新线程来重新启动该功能。 但对于短函数,我建议使用ThreadPool

由于您使用的是.NET 4.0,MS已经引入了“合作取消框架”。 您可以从此博客中了解更多信息。 直接与线程交易(越来越多)不鼓励。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM