首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中避免叙述者和字符串到语音的重叠?

如何在c#中避免叙述者和字符串到语音的重叠?
EN

Stack Overflow用户
提问于 2013-07-07 22:33:30
回答 1查看 387关注 0票数 0
代码语言:javascript
复制
    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();
        }
    }

假设上面的程序有两个名为speakContent & stop_speak的按钮。我运行narrator.exe进程来获取windows讲述人。我确实想在不重叠声音的情况下展示丰富的文本框内容。我知道Synchronos speak,但它会暂停我的应用程序,直到speakContent完成。我需要在SpeakAsyn()中使用它。有没有办法在语音解说员中添加无声?实际上我需要那段文字演讲,3秒后。我用过"System.Threading.Thread.Sleep(3000);“。但仍然发生文本重叠,意味着叙述者和字符串在一起播放语音。

请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2013-07-08 22:24:10

你可能想在后台线程中做一些与进程相关的事情...下面是一个使用BackgroundWorker的示例。它在Visual Studio的WinForms工具箱中可用,因此您应该能够将其拖放到您的表单上。

BackgroundWorkerDoWork事件创建一个处理程序。这是你将在后台线程中调用其他进程的地方。你可以在此处等待进程完成,而不会停止你的应用程序。

代码语言:javascript
复制
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    process = Process.Start("narrator.exe");
    process.WaitForExit();
}

当有人单击该按钮进行阅读时,您可以只检查BackgroundWorker当前是否正在运行,如果是,则什么也不做。

代码语言:javascript
复制
if(this.backgroundWorker1.IsBusy) return;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17513059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档