【发布时间】:2025-12-06 06:40:01
【问题描述】:
我了解到 Thread.Abort() 从我读过的大量关于该主题的文章中是邪恶的,所以我目前正在删除我所有的中止,以便以更清洁的方式替换它;在比较了人们在 * 上的用户策略之后,然后在阅读了 MSDN 中的 "How to: Create and Terminate Threads (C# Programming Guide)" 之后,两者都声明了一种非常相同的方法——即使用volatile bool 方法检查策略,这很好,但我还有几个问题......
这里让我印象深刻的是,如果您没有一个简单的工作进程,它只是运行一个处理代码的循环,该怎么办?例如,对我来说,我的进程是一个后台文件上传进程,我实际上是循环遍历每个文件,所以这就是一些东西,我可以肯定我可以在顶部添加我的while (!_shouldStop),它涵盖了我的每次循环迭代,但我有很多在下一次循环迭代之前发生的更多业务流程,我希望这个取消过程快速;不要告诉我我需要在我的整个工作函数中每隔 4-5 行将这些 while 循环洒下来吗?!
我真的希望有更好的方法,如果这实际上是正确的 [也是唯一的?] 方法,或者他们过去为实现我所追求的目标而使用的策略,请告诉我.
谢谢大家。
进一步阅读:All these SO responses 假设工作线程将循环。这让我感到不舒服。如果是线性但及时的后台操作呢?
【问题讨论】:
-
这样想:你真的希望你的长时间运行的进程在它可能处于某些状态变化处理过程中的任意时间中止吗?您需要在代码中间添加检查的原因(不一定在循环中,尽管这很常见)是因为只有您作为开发人员对您的代码有足够的了解,才能知道何时可以安全停止。如果线程阻塞等待同步信号,请参阅答案中提到的 Interrupt() 方法。
-
我不否认它不应该由用户(我)处理,它看起来就像很多多余的代码。以某种方式设置诸如尝试、捕获运行、持续监控之类的东西会很好,一旦标志为假,然后可能来自函数的
return;。我不知道。 -
原来我想要的是
Thread.Interrupt。虽然我认为至少现在我更喜欢布尔标志检查,以绝对确保我的应用程序状态的完整性。
标签: c# .net winforms multithreading