2013-07-07 76 views
0
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解說器。 我確實想要說明richtextbox內容沒有重疊的聲音。我知道Synchronos說話,但它會暫停我的應用程序,直到speakContent完成。我需要SpeakAsyn()。 無論如何在語音解說器中添加沉默?其實我需要3秒後發短信。我曾使用「System.Threading.Thread.Sleep(3000);」。但是仍然發生文本重疊, 手段解說者&串一起演講。如何避免敘述者和字符串到語音在c#中重疊?

請幫忙。

回答

0

您可能想在後臺線程中執行與進程相關的內容...以下是使用BackgroundWorker的示例。它可以在Visual Studio的WinForms工具箱中使用,因此您應該可以將它拖放到表單上。

BackgroundWorkerDoWork事件創建處理程序。這是您將在後臺線程中調用其他進程的位置。您可以等待此過程在您的應用程序停止時完成。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    process = Process.Start("narrator.exe"); 
    process.WaitForExit(); 
} 

當有人點擊該按鈕來讀取,你可以檢查BackgroundWorker正在運行,什麼事都不做,如果是這樣的話。

if(this.backgroundWorker1.IsBusy) return; 
+0

謝謝你的時間。我使用key_Leave事件修復了它。 –

+0

如果你願意,你可以自己發表一個答案(並接受它)來記錄你如何修復它(使用代碼示例等),這樣任何有此問題的人都將知道如何解決它。 –