当前位置: 首页 > 编程语言 > C#

如何中止使用ThreadPool.QueueUserWorkItem创建的线程分享

时间:2023-04-10 10:56:16 C#

C#学习教程:如何挂起使用ThreadPool.QueueUserWorkItem创建的线程或者也许我不需要?如果主应用程序退出会怎样?从它创建的所有线程都会自动中止吗?您不需要中止它们。当您的应用程序退出时,.NET将终止所有带有IsBackground=true的线程。.NET线程池的所有线程都设置了IsBackground=true,因此您不必担心。现在,如果您通过创建一个新的Thread类来创建线程,那么您将需要中止它们或将它们的IsBackground属性设置为true。但是,如果在这些线程中使用非托管资源,就会遇到很多麻烦。这取决于您如何使用它们——如果这些非托管资源被正确包装,那么它们将通过它们的包装器终结器进行处理,而不管用于终止引用它们的线程的机制如何。无论如何,操作系统将在应用程序退出时释放非托管资源。人们普遍认为(Windows)应用程序在应用程序关闭时花费太多时间尝试清理-通常涉及分页-大量内存只是为了可以再次丢弃它(或代码中的分页代码)以释放非-操作系统必须处理的管理对象。线程池使用后台线程。所以它们都会在应用程序退出时自动关闭。如果你想自己中止一个线程,你要么必须自己管理线程(这样你就可以在线程对象上调用Thread.Abort()),要么你必须设置某种形式的通知机制,让你告诉线程它应该自行中止。是他们会。但是,如果在这些线程中使用非托管资源,就会遇到很多麻烦。是的,它们是背景,但是f.ex如果你有应用程序,你使用ThreadPool进行各种下载或其他东西,你想停止它们,你如何停止?我的建议是:尽快退出线程,f.exboolstop=false;voiddoDownloadWork(objects){if(!stop){DownloadLink((String)s,location);}}如果设置stop=true,那么在队列线程完成处理后,第二个(当前在队列中)线程自动退出。基于Lukas?alkauskas的回答。但是你应该使用:volatileboolstop=false;告诉编译器这个变量被多个线程使用。以上就是C#学习教程:如何暂停ThreadPool.QueueUserWorkItem创建的线程共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: