应用程序CTRL-C信号只能工作一次

时间:2013-04-04 15:50:25

标签: c# console

我有一个相当奇怪的问题,我一直无法谷歌。

在一些几乎没有感觉的学校演示程序上工作,我需要有一个工作循环去做它的业务,直到它被CTRL-C信号中断,然后运行一些其他功能。完成后,程序将恢复它之前停止的工作循环。

所有这一切都很有效,新的按键事件是这样完成的:

Console.TreatControlCAsInput = false;
Console.CancelKeyPress += new ConsoleCancelEventHandler(interrupt);

按下CTRL-C时,“中断”方法被正确调用并执行一次。

当它通过时,我似乎完全无法通过中断信号再次调用它。任何后续的CTRL-C按键都被完全忽略。

“interrupt”方法以.Join结束与其父线程合并,因为事件处理程序由于某种原因在单独的线程上运行。

是什么阻止我多次调用中断方法?

3 个答案:

答案 0 :(得分:2)

Thread.Join没有“合并”线程。它阻塞当前线程,直到另一个线程完成。当你加入主线程时,这将永远不会发生,直到程序退出。

完全删除该通话。

答案 1 :(得分:2)

您是否将Cancel属性设置为true?这对我有用:

using System;
using System.Threading;

class Test
{
    static void Main()
    {
        Console.TreatControlCAsInput = false;
        Console.CancelKeyPress += (sender, args) => {
            // We want to keep going...
            args.Cancel = true;
            Console.WriteLine("Handler called");
        };
        Console.WriteLine("Go for it!");
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine(i);
            Thread.Sleep(1000);
        }
    }
}

根据Daniel的回答,目前还不清楚你的线程是什么样的 - 这可能是另一个不正确的方面。

答案 2 :(得分:1)

Console.TreatControlCAsInput看起来不应该设置为false:

  

如果Ctrl + C被视为普通输入,则为true;否则,错误。