如何在 C# 中在定义的时间段内保持整个进程执行,包括所有正在运行的线程

Posted

技术标签:

【中文标题】如何在 C# 中在定义的时间段内保持整个进程执行,包括所有正在运行的线程【英文标题】:How to hold whole process execution including all it's running threads for defined period of time in C# 【发布时间】:2020-08-31 07:31:35 【问题描述】:

我有一个进程运行多个线程与软件和硬件组件通信。

出于测试目的,需要模拟断开连接和超时。进程执行保持模拟所有子组件的通信超时。目前这可以通过在调试模式下运行并设置断点来完成。在断点时,所有线程都被暂停执行并且所有超时都会发生。 但在自动化测试中,断点不是一种选择。

如何才能让包括所有正在运行的线程在内的整个进程保持 x 秒?

编辑#1:我正在寻找一种通用方法来保持整个过程的执行,包括所有正在运行的任务(线程)——一种没有断点的真正断点行为。而不是一种自动恢复流程的方式。

编辑#2:This 问题的答案可能有效。似乎需要进行一些调整。

【问题讨论】:

x-y 问题。真的应该是“如何故意诱导超时以进行测试”。 “如何为测试故意引入超时”问题有很多答案。最好是创建一个在需要时会导致超时的模拟。可悲的是,这不是我的选择。关闭进程/端口可能会导致断开连接,但是恢复将是不同的/不可能的。我正在寻找更通用的解决方案。 【参考方案1】:

出于调试目的,在 Visual Studio 中,您可以使用 Debug>Windows>Threads 窗口轻松完成此操作。 在那里,您可以随意冻结和解冻踏板。

编辑:为了在单元测试时执行此操作,您需要构建自己的冻结机制,假设每个线程都有一个运行循环,您可以在其中检查某些全局冻结状态以暂停执行。

【讨论】:

感谢您的回答。由于线程在“等待”通信答案,我无法在那里实现冻结。我需要一个更全局的停止 - 与断点行为相同。

以上是关于如何在 C# 中在定义的时间段内保持整个进程执行,包括所有正在运行的线程的主要内容,如果未能解决你的问题,请参考以下文章

如何在xcode中在后台重复触发进程

如何检测一个进程是不是已经执行完毕

如何在 C# MVC 应用程序中在运行时创建 SQL Server Express 数据库?

当所有进程都在 c# 的单独线程上运行时,如何保持控制台应用程序打开?

如何在 C# VSTO Word 加载项中在页码旁边设置页眉和页脚文本?

C#中在哪里声明全局变量啊,具体位置在哪儿,我是初学者。。。