3

SpeakAsync() メソッドを使用してテキストを読み上げようとしています。ただし、Speak() を呼び出すまで、何も話し始めません。Speak() を呼び出したくありません。このコードから Speak() メソッドを削除すると、何も呼び出されません。

        using (SpeechSynthesizer synth = new SpeechSynthesizer())
        {

            synth.SelectVoice("ScanSoft Emily_Dri20_22kHz");

            synth.Rate = 10;
            synth.Volume = 100;

            synth.SpeakAsync("oh, i'm a lumberjack and i'm okay!  I sleep all night and I work all day!");
            synth.SpeakAsync("If he was dying he wouldn't bother writing ah!  He'd just say it!");
            synth.Speak("i don't want to go on the cart.");
            synth.SpeakAsync("We don't have a lord.  We're an anarcho-syndicalist commune.");
            synth.SpeakAsync("If you do not show us the grail, we shall take your castle by force!");
            synth.Speak("what do you mean, an african swallow or a european swallow?");

アップデート:

他の人がこの問題を抱えているようですが、解決策はまだ見つかっていません:

この問題を抱えている他の人々

4

1 に答える 1

6

これSpeakは、プログラムの実行を維持するブロッキング呼び出しであるためです。これをコンソール アプリケーションとして実行しているので、コードの最後に追加Console.ReadKey();して、ユーザーがキーを押すまでアプリケーションが実行され続けるようにします。

そうしないと、メインスレッドが終了しSpeakAsyncます。すぐに戻るため、プログラムはこれらすべての行を飛んで終了するため、何も聞こえません。

コメントに基づく更新 -

usingブロックはSpeechSynthesizerすぐに破棄されるため、何も聞こえません。Console.ReadKey();ブロックの右中括弧の直前に配置するかusing、ブロックを削除してusing後で手動で破棄することができます。

于 2013-04-04T11:41:12.380 に答える