2011-04-01 42 views
1

可能重複:
Synchronization Problem for SAPI or (text to speech) … C#航問題的WebControl和SAPI在C#

我已經和WebControl的瀏覽器。現在我想閱讀並突出顯示文字。所以我分裂然後開始一個循環。現在問題是,用SAPI的同步調用來說句子,瀏覽器的其他按鈕停止工作。我無法暫停,恢復甚至退出軟件。每個按鈕都被吊死。

如果我使用SAPI的異步調用,則不會發生此問題,但是文本突出顯示不起作用。所以,我需要堅持這個同步調用,並解決這個掛起問題。有沒有人有任何解決方案!!!!!!!

for (int i = 0; i < splitSentences.Length; i++) 
{ 
    highlight(splitSentences[i]); 

    sound_object.Speak(splitSentences[i]); 
} 

請急需幫助。我怎樣才能找出那些暫停,瀏覽器的退出按鈕,同時講sentece ....

+0

不能合理地進行同步調用掛的用戶界面。使用事件來檢測進度。 – 2011-04-01 04:20:28

+0

Bro即使我完全關閉了突出顯示選項,仍然按鈕停止使用同步呼叫。 – AtanuCSE 2011-04-01 13:48:38

回答

1

我想你應該在HighLight功能使用調用。

例如,

void Do() //Must be start in another thread, not in main 
{ 
    string [] splitSentences = new [] {"bye", "hello"}; 

    for (int i = 0; i < splitSentences.Length; i++) 
    { 
     HighLight(splitSentences[i], this); 
     sound_object.Speak(splitSentences[i]); 
    } 
} 

void HighLight(string str, Control webBrowser) 
{ 
    if (this.InvokeRequired) 
    { 
     this.Invoke(new Action<string>(s, c => HighLight(s, c))); 
    } 

    // Highlight code here 
} 
+0

爲了減少響應時間,您可以使用'BeginInvoke'而不是'Invoke'。請注意,在WinForms中調用BeginInvoke不需要稍後調用EndInvoke(但如果願意,您仍然可以執行此操作)。你可以在這裏閱讀完整的指南:http://weblogs.asp.net/justin_rogers/pages/126345.aspx。 – 2011-04-01 04:54:31

+0

@Dmitry洛巴諾夫,我認爲authour想一步地突出定義的順序文本,一步...'BeginInvoke'可能造成的步驟混合:step1-> step3->第二步。 – acoolaum 2011-04-01 04:59:56