在我的应用程序中,我如何中断文本到语音合成的播放

本文关键字:文本 中断 语音合成 播放 应用程序 我的 何中断 | 更新日期: 2023-09-27 17:53:03

这是我用来调用richTextBox的代码。我的问题是,当文本播放时,我不能点击任何东西。我甚至不能停止玩。我该如何解决这个问题?是否存在通过点击按钮而停止游戏的方法?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Synthesis;
namespace Merger
{
    public partial class Form1 : Form
    {
        SpeechSynthesizer tell = new SpeechSynthesizer();
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
            tell.Rate = trackBar1.Value;
        }
        private void Form1_Resize(object sender, EventArgs e)
        {
            this.Refresh();
        }
        private void pictureBox2_Click(object sender, EventArgs e)
        {
            tell.Volume = 100;
            tell.Speak(richTextBox1.SelectedText);
        }
        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            tell.Rate = trackBar1.Value;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            tell.SpeakAsyncCancelAll();
        }
    }
}

在我的应用程序中,我如何中断文本到语音合成的播放

问题是Speak()方法是同步的,因此它将锁定您所在的线程。假设你在一个线程上,那将是UI线程,因此锁定你正在做的任何事情。

你可能会更好地使用不同的线程Speak(),它不会锁定你当前的(UI)线程。

SpeechSynthesizer。通话方法(字符串)- MSDN

或者你可以使用SpeechAsync方法,它将异步执行!

SpeechSynthesizer。SpeakAsync Method (String) - MSDN

你可以先暂停,然后全部取消,再重新开始

   private void button1_Click(object sender, EventArgs e)
    {
        tell.Pause();
        tell.SpeakAsyncCancelAll();
        tell.Resume();
    }