当.NET 中的另一个线程正在执行 Console.ReadLine 时,如何中止该线程? [复制]

2023-11-26

我的控制台应用程序正在执行一个完全致力于用户界面的线程,它花费大量时间阻塞Console.ReadLine()(此调用将时间花在 Windows 内部深处,不受 .NET 框架的控制)。

我需要中止这个线程。然而,下面的代码似乎不起作用:

this.UserInterfaceThread.Abort();

有任何想法吗? Thread.Interrupt() 有什么用吗?

Update

正如汉斯·帕桑特指出的那样:

当 CLR 中止线程时,它会对线程的状态施加相当合理的规则。 Thread.Abort() 的危险是众所周知的,肯定无法可靠地工作的是中止正在执行非托管代码的线程。当您调用 Console.ReadLine() 时就是这种情况,线程被深深地埋藏在 Windows 操作系统代码中。

解决方案是简单地将 [enter] 按键插入当前正在运行的控制台应用程序,这会解除 Console.ReadLine() 的阻塞,因此线程会立即中止。

We cannot使用 SendKeys,因为这是特定于 Windows 窗体的,并且它还要求当前窗口具有焦点。

解决方案是使用位于inputsimulator.codeplex.com它包装了 Windows SendInput() 调用。

参见示例代码:

.NET 调用将 [enter] 击键发送到当前进程,这是一个控制台应用程序?


当 CLR 中止线程时,它会对线程的状态施加相当合理的规则。 Thread.Abort() 的危险是众所周知的,肯定无法可靠地工作的是中止正在执行非托管代码的线程。当您调用 Console.ReadLine() 时就是这种情况,线程被深深地埋藏在 Windows 操作系统代码中。

你必须以不同的方式来做这件事。一个显而易见的方法是让这个“用户界面”线程停止程序,而不是相反。可以像“退出”命令或众所周知的“按任意键继续”消息一样简单。

或者将线程的 IsBackground 属性设置为 true。现在您不必中止它,Windows 将在您的 Main() 方法退出后关闭进程时终止它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当.NET 中的另一个线程正在执行 Console.ReadLine 时,如何中止该线程? [复制] 的相关文章

  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 使用 Jasmine 在 JavaScript 中存根 WebSocket

    我尝试测试是否onmessage是一个适当的函数 这是一个测试 describe init address window function beforeEach function address ws test address window
  • MigLayout 推送 VS 增长

    这两个约束有什么区别 从文档中 PUSH 使组件所在的行和 或列随着 权重 而增长 GROW 设置组件相对于同一单元中的其他组件的增长程度 那么 主要的想法是缩小组件内部和外部的尺寸 重要的是要明白fill 列 行 grow push协同工
  • 当未指定默认命名空间时,函数 getMessageData 必须使用前缀[重复]

    这个问题在这里已经有答案了 我收到这个错误 WEB INF jsp account index jsp 6 0 函数 getMessageData 必须 当未指定默认名称空间时与前缀一起使用
  • 二叉树插入算法

    我最近完成了我正在从事的一个项目的二叉搜索树的实现 一切都很顺利 我学到了很多东西 然而 现在我需要实现一个常规的二叉树 由于某种原因 这让我感到困惑 我正在寻找一种方法来执行我的 InsertNode 功能 通常在 BST 中 您只需检查
  • 动态改变listview的分隔线高度?

    这个问题已被问到这里a link 我也想澄清一下问题 我有 10 个列表项Listview我想要拥有deviderheight每个列表项的不同之处就像第一个项目应该是setDividerheight 2 第二次setDividerheigh
  • Maven:在pom.xml中设置settings.xml位置?

    是否可以设置位置settings xml文件内的pom xml file 我知道你可以通过命令行输入来做到这一点mvn s location of settings xml 但我想知道是否可以将其设置在pom xml所以我不必继续通过命令行
  • 如何使用媒体源 API 将两个视频文件数据附加到源缓冲区?

    我有两个视频 名称为 v11 webm 和 v12 webm 我想要的是这两个视频应该无缝运行 没有任何间隙 我正在遵循将数据附加到源缓冲区的媒体源 api 方法 我指的是对此给出的演示link 我修改了该示例并删除了对视频进行分块的部分
  • 平滑算法

    我编写了这段代码来平滑曲线 它需要一个点旁边的 5 个点并将它们相加并求平均值 Smoothing void smoothing vector
  • 在 Google 地图上移动并显示驾驶摄像头视图

    我已经通过谷歌地图路由添加了当前位置 Routing routing new Routing Builder travelMode Routing TravelMode DRIVING key getResources getString
  • 对“initscr”Ncurses 的未定义引用

    我正在尝试编译我的项目并使用 lib ncurse 当编译器链接文件时我遇到了一些错误 这是我在 Makefile 中的标志行 W Wall Werror Wextra lncurses 我已经包含了 ncurses h 一些布局 prom
  • MySQL UPDATE 查询,其中 id 最高并且字段等于变量

    我正在尝试构建一个 MySQL 查询 该查询将更新表中 id 最高且名为 idSession 的字段等于 65 的行 它看起来像这样 UPDATE History SET state 0 WHERE id SELECT MAX id FRO
  • Windows.Security.Cryptography 和 Windows Phone 8 SDK?

    今天我安装了新的Windows Phone 8 SDK w8phone SDK 尝试包括我的一些基类 来自 Windows 8 应用程序 他们说相同的核心 但是哎呀 no Windows Security Cryptography 我用的是
  • PHP-时间减去时间到分钟

    在 php 中我有两次 11 00 00 和 12 45 00 我想以分钟为单位得出它们之间的差异 在本例中为 105 分钟 最好的方法是什么 谢谢你 干得好 strtotime 12 45 00 strtotime 11 00 00 60
  • 为什么变量的寿命不够长?

    考虑这个函数 它应该返回给定的文件扩展名Path pub fn get extension lt a gt path a Path gt Option lt a str gt let path str path as str unwrap
  • 使用 VBA 宏取消选择 Excel 工作簿中的所有复选框

    我有一本包含 100 多个复选框的工作簿 他们是表单控件复选框 我想一次性取消选择它们 这就是将它们设置为 false Sub clearcheck ActiveSheet CheckBoxes Value False End Sub 这适
  • 用Python 3.1制作一个可移植的(exe)?

    有没有办法为 python 应用程序制作可移植 独立的 exe 我读过有关 p2exe 的内容 但它不支持最新版本 我不愿意使用 2 6 因为我宁愿保留最新版本 也不愿担心 2 6 过时后会出现不兼容问题 cx freeze 对我有用 这是
  • 连接到 FCM 的应用程序未收到来自 AWS SNS 的通知

    我已将 Android 应用连接到 Google Firebase 云消息服务 FCM 如下所示本指南 我已经关注了这个答案设置 FCM 和之间的连接AWS SNS 我可以成功接收来自FCM控制台但不是来自AWS SNS 控制台 消息邮寄状
  • 从 javascript 到 java servlet 的 HTTP POST

    如何通过 JavaScript 将参数 POST 到 Java Servlet 这是我的 html 代码 它可以工作 div div
  • Prolog,带有条件子句的构建列表

    我需要使用序言 SWI 风格 来完成这项家庭作业 但有些事情我无法理解 例如 如果我想迭代一个列表并将其元素添加到另一个列表中 但只有当它们满足特定条件时 我将如何处理 我可以将它们全部添加 也可以不添加 但是如果我添加检查此条件的子句 则
  • 当.NET 中的另一个线程正在执行 Console.ReadLine 时,如何中止该线程? [复制]

    这个问题在这里已经有答案了 我的控制台应用程序正在执行一个完全致力于用户界面的线程 它花费大量时间阻塞Console ReadLine 此调用将时间花在 Windows 内部深处 不受 NET 框架的控制 我需要中止这个线程 然而 下面的代