如何让Microsoft语音引擎停止而不是暂停而不会崩溃?

时间:2015-08-12 20:53:48

标签: c# speech-synthesis

我正在使用Microsoft语音引擎和SAPI语音处理文本到语音应用程序,并且在大多数情况下,它的工作方式应该如此。

首先,这是我的使用陈述:

using System;
using System.Globalization;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis;

好的,所以我在文本框中键入了一些文本,单击“播放/暂停”按钮,它会大声朗读文本。播放/暂停按钮似乎工作得很好。

以下是播放/暂停按钮的代码:

    private void btnPlayPause_Click(object sender, EventArgs e)
    {
        if (btnPlayPause.Text == "Pause")
        {
            reader.Pause();
            btnPlayPause.Text = "Play";
        }
        else if (btnPlayPause.Text == "Play")
        {
            if (txtTextToSpeak.Text == "")
                MessageBox.Show("Please type some text.", "OOPS!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                if (reader.State == SynthesizerState.Paused)
                    reader.Resume();
                else
                {
                    reader.SelectVoice(cmbxVoices.Text);
                    reader.SpeakAsync(txtTextToSpeak.Text);
                    btnPlayPause.Text = "Pause";
                }
            }
        }
    }

这是停止按钮的点击事件的代码:

    private void btnStop_Click(object sender, EventArgs e)
    {
        reader.Pause();
        reader.Dispose();
        btnPlayPause.Text = "Play";
        glbstrText2BSpoken = "";
    }

问题在于:当我单击“停止”按钮时,我希望阅读器自行重置,以便下次单击“播放”按钮时,它会从头开始读取文本。我尝试了reader.Dispose();“在Stop按钮的事件处理程序中,但应用程序因错误”无法访问已处置的对象而崩溃。“当我单击”停止“按钮然后单击”播放“按钮时会发生这种情况。

0 个答案:

没有答案