[英]How to restart a task in c#? or How to restart Thread.Sleep()?
[英]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.