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);“。但仍然发生文本重叠,意味着叙述者和字符串在一起播放语音。
请帮帮忙。
发布于 2013-07-08 22:24:10
你可能想在后台线程中做一些与进程相关的事情...下面是一个使用BackgroundWorker的示例。它在Visual Studio的WinForms工具箱中可用,因此您应该能够将其拖放到您的表单上。
为BackgroundWorker的DoWork事件创建一个处理程序。这是你将在后台线程中调用其他进程的地方。你可以在此处等待进程完成,而不会停止你的应用程序。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
process = Process.Start("narrator.exe");
process.WaitForExit();
}当有人单击该按钮进行阅读时,您可以只检查BackgroundWorker当前是否正在运行,如果是,则什么也不做。
if(this.backgroundWorker1.IsBusy) return;https://stackoverflow.com/questions/17513059
复制相似问题