如何避免叙述者和字符串在c#中重叠?

时间:2013-07-07 14:33:30

标签: .net c#-4.0 narrator

    Process process;

    // Read Contetnt Mouse click event
    private SpeechSynthesizer readerSpeak;
    private void btnSpeakContent_Click(object sender, EventArgs e)
    {
        if(richTextBoxThanglish.Text.Trim() == string.Empty)
        {
            if (process.HasExited == false)
                process.Kill();
            MessageBoxWrapper.ShowWarning("Textbox is Empty.", "ABTS", "Textbox is Empty.");
            process = Process.Start("narrator.exe");
        }
        else
        {
            if (process.HasExited == false)
                process.Kill();

            readerSpeak = new SpeechSynthesizer();                
            readerSpeak.SpeakAsync(richTextBoxThanglish.Text.ToString());

            if (process.HasExited == true)
                process = Process.Start("narrator.exe");
        }
    }       

    private void btnStopSpeak_Click(object sender, EventArgs e)
    {
        if (process.HasExited == true)
            process = Process.Start("narrator.exe");

        if (!(readerSpeak == null))
        {                
            readerSpeak.Dispose();
        }
    }

假设上面的程序有两个按钮叫talkContent& stop_speak。我运行narrator.exe进程来获取Windows解说员。 我确实想要在没有重叠声音的情况下调出richtextbox内容。我知道Synchronos说话,但它会暂停我的应用程序直到speakContent完成。我需要使用SpeakAsyn()。 无论如何在语音叙述者中加入沉默?实际上我需要3秒后发短信。我使用过“System.Threading.Thread.Sleep(3000);”。但仍然发生文字重叠, 意味着叙述者和字符串与语音一起播放。

请帮忙。

1 个答案:

答案 0 :(得分:0)

您可能希望在后台线程中执行与流程相关的内容...这是使用BackgroundWorker的示例。它可以在Visual Studio的WinForms工具箱中使用,因此您应该只需拖放到表单上即可。

BackgroundWorker的{​​{1}}事件创建处理程序。这是您在后台线程中调用其他进程的地方。您可以在不停止应用的情况下等待此过程完成。

DoWork

当有人点击按钮阅读时,您只需检查private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { process = Process.Start("narrator.exe"); process.WaitForExit(); } 当前是否正在运行,如果是这种情况则不执行任何操作。

BackgroundWorker