winforms – Tempo limite para resposta de uma ou mais ação C#

Estou desenvolvendo um app em windowsforms, a fim de criar uma assistente pessoal e estou tendo dificuldade em limitar a ação dela. O problema é que quando inicio o processo de identificação da voz:
reconhecedor.RecognizeAsync(RecognizeMode.Multiple);
E por algum motivo ele começa a gravar uma conversa ou uma musica, ele para de responder, então ele reinicia o código. Entretanto quando essa parte é reiniciada pela segunda vez e por algum motivo o problema anterior de travar na gravação não ocorre, por o ambiente estar silencioso ou algo assim, ele faz a ação 2x ou mais dependendo de quantas vezes reiniciou. Aí tentei criar um limitador que é ativado assim que é a primeira resposta é dada para então bloquear a segunda, mas aparentemente ele não funcionou por as duas serem respondidas ao mesmo tempo. Então tentei por fim buscar isolar o problema em um outro forms mas o fato de abrir e fechar o outro forms toda hora fez com que atrapalhasse o uso dos demais aplicativos no pc. Vocês tem alguma ideia de como fazer um tipo de temporizador que cancele a ação quando um tempo limite for atingido?

Código onde o problema ocorre:

    public void Gramática()
    {
        try
        {
            reconhecedor = new SpeechRecognitionEngine(ci);
        }
        catch (Exception ex)
        {
            txb_depurador.Text = "Erro ao integrar linguagem escolhida: " + ex.Message;
            TravaFala = false;

        }
        var gramatica = new Choices();
        gramatica.Add(ListaComandos);
        var gb = new GrammarBuilder();
        gb.Append(gramatica);
        try
        {

            var g = new Grammar(gb);
            try
            {
                Limitador = false;
                //O erro ocorre aqui
                reconhecedor.RequestRecognizerUpdate();
                reconhecedor.LoadGrammarAsync(g);
                reconhecedor.SpeechRecognized += Sre_Reconhecimento;
                reconhecedor.SetInputToDefaultAudioDevice();
                resposta.SetOutputToDefaultAudioDevice();
                reconhecedor.RecognizeAsync(RecognizeMode.Multiple);
                //Até aqui
            }
            catch (Exception ex)
            {
                txb_depurador.Text = "Erro ao criar reconhecedor: " + ex.Message;
                TravaFala = false;
            }
        }
        catch (Exception ex)
        {
            txb_depurador.Text = "Erro ao criar gramática: " + ex.Message;
            TravaFala = false;
        }
    }

Código completo:

    private void timer_1s_Tick(object sender, EventArgs e)
    {
        Init();
        Limite++;
    }

    void Sre_Reconhecimento(object sender, SpeechRecognizedEventArgs e)
    {
        string frase = e.Result.Text;
        txb_depurador.Text = "Comando usado: " + frase;
        try
        {
            if (Limite < 10 || Limitador == false)
            {
                Limitador = true;
                switch (frase)
                {
                    //Respostas Console
                    case "oi": { resposta.Speak("Olá, como posso te ajudar?"); break; }
                    case "quem é você": { resposta.SpeakAsync("sou papaguaio, seu assistente"); break; }
                    case "que horas são": { resposta.Speak("Agora são " + DateTime.Now.ToString("h e m")); break; }
                    //Resposta Alterar Volume                    
                    case "volume 10": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 100; break; }
                    case "volume 9": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 90; break; }
                    case "volume 8": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 80; break; }
                    case "volume 7": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 70; break; }
                    case "volume 6": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 60; break; }
                    case "volume 5": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 50; break; }
                    case "volume 4": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 40; break; }
                    case "volume 3": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 30; break; }
                    case "volume 2": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 20; break; }
                    case "volume 1": { resposta.SpeakAsync("Ok"); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; defaultPlaybackDevice.Volume = 10; break; }
                }
            }
        }
        finally { TravaFala = false; Limite = 0;}
    }
    public void Gramática()
    {
        try
        {
            reconhecedor = new SpeechRecognitionEngine(ci);
        }
        catch (Exception ex)
        {
            txb_depurador.Text = "Erro ao integrar linguagem escolhida: " + ex.Message;
            TravaFala = false;

        }
        var gramatica = new Choices();
        gramatica.Add(ListaComandos);
        var gb = new GrammarBuilder();
        gb.Append(gramatica);
        try
        {

            var g = new Grammar(gb);
            try
            {
                Limitador = false;

                reconhecedor.RequestRecognizerUpdate();
                reconhecedor.LoadGrammarAsync(g);
                reconhecedor.SpeechRecognized += Sre_Reconhecimento;
                reconhecedor.SetInputToDefaultAudioDevice();
                resposta.SetOutputToDefaultAudioDevice();
                reconhecedor.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch (Exception ex)
            {
                txb_depurador.Text = "Erro ao criar reconhecedor: " + ex.Message;
                TravaFala = false;
            }
        }
        catch (Exception ex)
        {
            txb_depurador.Text = "Erro ao criar gramática: " + ex.Message;
            TravaFala = false;
        }
    }
    public void Init()
    {
        if (Limite == 20)
        {
            txb_depurador.Text = "Limite de tempo para resposta atingido";
            TravaFala = true;
            resposta.Volume = 100;
            resposta.Rate = 3;
            Gramática();
        }
        if (TravaFala == false)
        {
            TravaFala = true;
            resposta.Volume = 100;
            resposta.Rate = 3;
            Gramática();
        }
    }