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);”。但仍然发生文字重叠, 意味着叙述者和字符串与语音一起播放。
请帮忙。
答案 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