gpt4 book ai didi

c# - 为什么这个短程序永远不会完成?

转载 作者:行者123 更新时间:2023-11-30 13:53:51 25 4
gpt4 key购买 nike

通过调试我自己的一个问题,我成功地重新创建了一个行为异常的小程序:

using System;
using System.Threading;

namespace CancelBug
{
class Program
{
static void Main(string[] args)
{
var unused = new ManualResetEvent(false);
var cancelled = new ManualResetEvent(false);
Console.CancelKeyPress += (s, e) => cancelled.Set();
Console.WriteLine("Running. The only thing to do now is ctrl+c or close the window...");
WaitHandle.WaitAny(new[] { unused, cancelled });
Console.WriteLine("Press enter to continue...");
Console.Read();
}
}
}

我希望这个程序:

  • 显示第一行
  • 等到用户尝试退出程序
  • 显示第二行
  • 等到用户按下回车键
  • 退出

但是,一旦它通过对 WaitHandle.WaitAny 的调用,它似乎会卡在随机线路上。有时最后一行永远不会被打印,有时它会被打印但回车键永远不会被读取。有了更大的代码库,它可以执行更多行代码并仍然卡在看似随机的位置。

谁能解释这种奇怪的行为?

最佳答案

您需要取消 CTRL+C 命令,否则您的进程将被终止:

Console.CancelKeyPress += (s, e) =>
{
e.Cancel = true;
cancelled.Set();
};

来自 https://msdn.microsoft.com/en-us/library/system.consolecanceleventargs(v=vs.110).aspx :

If the Cancel property is set to true in the event handler, the process is resumed; otherwise, the process is terminated. By default, the value of the ConsoleCancelEventArgs property is false, and the process terminates.

关于c# - 为什么这个短程序永远不会完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51395142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com