1

可能重复:
SAPI 或(文本到语音)的同步问题...... C#

我用 WebControl 做了一个浏览器。现在我想阅读并突出显示文本。所以我拆分了句子并开始循环。现在的问题是,通过同步调用 SAPI 来说出句子,浏览器的每个其他按钮都停止工作。我无法暂停、恢复甚至退出软件。每个按钮都会被绞死。

如果我使用 SAPI 的异步调用,则不会出现此问题,但是文本的突出显示将不起作用。所以,我需要坚持这个同步调用,并克服这个挂起问题。有没有人有解决办法!!!!!!

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

    sound_object.Speak(splitSentences[i]);
}

请急需帮助。我怎样才能在说出句子时解决浏览器的那些暂停,退出按钮......

4

1 回答 1

1

HighLight我认为你应该在函数中使用 Invoke 。

例如,

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
}
于 2011-04-01T04:19:44.167 回答