【发布时间】:2024-01-30 08:35:02
【问题描述】:
我尝试使用以下代码在控制台应用程序中捕获 Ctrl+C:
/// <summary>
/// A driver program for testing
/// </summary>
/// <param name="args">Arguments to the program</param>
static void Main(string[] args)
{
var program = new Program();
Console.Clear();
Console.TreatControlCAsInput = false;
Console.CancelKeyPress += program.OnCancelKeyPress;
program.Run(args.FirstOrDefault() ?? "3.26.200.125");
Console.WriteLine("Press any key to continue ...");
Console.ReadKey();
}
/// <summary>
/// Called when [cancel key press].
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="System.ConsoleCancelEventArgs"/> instance containing the event data.</param>
internal void OnCancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
this.Continue = false;
e.Cancel = true;
}
我已经检查了here 和here 的问题,但是由于某种原因,当我按下 Control+C 时,Visual Studio 2010 不会进入调试器中的处理程序,我只是得到一个“源”代码不可用”屏幕,以及继续调试的机会,仅此而已。有人知道我为什么不进入处理程序吗?我确定我只是缺少一些简单的东西。
【问题讨论】:
-
这也是我调试的时候,当我在 release 中运行程序时它工作正常。这只是我遇到的视觉工作室问题吗?
-
您是否尝试过在控制处理程序中设置断点?在您的处理程序运行之前,可能有一些原因导致 Visual Studio 中断执行。然后您可以查看是否继续稍后进入控制处理程序。
-
是的,我在处理程序中放置了一个断点,它永远不会被命中。一旦我在上面提到的点按 F5 继续(希望进入我的处理程序),程序就会恢复运行,就好像什么都没发生,也没有按下中断键。
-
由于调试器的更改而为 VS2010 设计。 Ctrl+C 现在的作用类似于 Debug + Break All。一种解决方法是启用非托管代码调试,单击消息框上的继续,您的断点将被命中。
标签: c# console interrupt-handling