【问题标题】:Threads - running even if main app hangs?线程 - 即使主应用程序挂起也能运行?
【发布时间】:2018-03-30 14:34:23
【问题描述】:

是否可以在 C# 应用程序中运行线程,循环执行某些任务,即使主 gui 进程完全死锁,挂起,表单无法刷新,看起来像冻结,对用户没有反应?

在这种应用程序状态下是否有可能运行且正确工作的线程,或者唯一的方式是另一个进程?

Windows、c# winform 应用程序。

.NET FRAMEWORK 3.5(不更高)

【问题讨论】:

  • 是的,反正是短期内。如果应用程序挂起,Windows 将意识到它没有处理消息泵并将进程标记为“挂起”并要求您终止它。
  • 为什么主应用程序首先会“挂起”?异步编程的思路之一不就是停止GUI挂吗?
  • 您甚至可以循环执行任务并让 GUI 死锁/冻结 使用不同的线程!对我来说闻起来像是 XY 问题。
  • 我需要它来进行测试和学习。假设主应用程序有定时器,这个定时器检查可以在几分钟后返回的硬件设备或无限期挂起死锁而不返回状态(我知道应该有线程而不是定时器,但我想用定时器测试它以用于学习目的),即使这个主应用程序计时器挂起(并且计时器在 gui 进程中运行)我的线程无论如何都会工作,比如写入日志等?
  • @itsme86 我该怎么做?

标签: c# .net winforms concurrency parallel-processing


【解决方案1】:

是的。这就是线程的全部目的:继续独立执行,而其他部分可能处于挂起/等待状态或执行不同的操作。

但是,正如 cmets 中提到的那样,在 UI 应用程序中,冻结 UI 的概念,而其他线程正在处理某些事情违背了 UI 本身作为用户的元的目的,这是假定的反应灵敏,互动愉快。

【讨论】:

  • 好的,所以如果我在主 gui 应用程序线程程序中从磁盘读取,但是这个磁盘有坏扇区,有时即使在任务管理器中我也无法杀死这个挂起的进程,smple 线程仍然可以工作并在我编写的代码中运行?
  • 没有。如果您终止该进程,则与该进程关联的所有线程都会随之死亡。您说 GUI 已挂起/冻结。没有被杀。那是完全不同的。
  • @user2265690:线程是进程的“子进程”,它们的生命周期受进程自身生命周期的约束。
  • 我不会杀它的,我写了在任务管理器里不可能杀了它来告诉这个进程挂了多少。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2019-01-21
  • 2019-03-21
  • 1970-01-01
相关资源
最近更新 更多