2016-11-03 21 views
0

次のコードでは、条件の一致をtimer_tickイベントで確認して、テキストと音声の再生をトリガーします。しかし条件が満たされると、結果は期待通りに得られるが、プログラムはフリーズする。Timer_Tickはプログラムをフリーズします

また、これらの条件が一致したときにポップアップメッセージボックスを追加する方法。オーディオファイルやスピーチを繰り返しても問題ありませんが、タイマーティックのように繰り返しメッセージボックスを開くことは望ましくありません。

private void timer1_Tick(object sender, EventArgs e)  
{ 
    label_time1.Text = DateTime.Now.ToString("hh:mm:ss tt"); 
    label6.Text = DateTime.Now.ToShortDateString(); 
    if (((DateTime.Now.ToString("hh:mm tt") == (textBox_ordertostart.Text) && (DateTime.Now.ToShortDateString() == dateTimePicker2.Value.ToShortDateString()) && (checkBox_delivery.CheckState == 0) && (checkBox_pickup.CheckState != 0)))) 
    { 
     comboBox_suburb.Enabled = false; 
     checkBox_delivery.Enabled = false; 
     mplayer = new SoundPlayer(WindowsFormsApplication17.Properties.Resources.good_morning); 
     mplayer.Play(); 


     pbuilder.ClearContent(); 

     pbuilder.AppendText("Pickup order time start now"); 


     txt2speech.Speak(pbuilder); 
     pbuilder.AppendBreak(PromptBreak.Medium); 
    } 
+0

[SpeechSynthesizerクラス](https://msdn.microsoft.com/en-us/library/office/system.speech.synthesis.speechsynthesizer.aspx)を使用していますか?もしそうなら、 'Speak'の代わりに' SpeakAsync'を試してください。 – adv12

+0

それはすばらしいおかげです。メッセージボックスに関する考え方は? –

答えて

0

スピーチ機能を使用するとSpeechSynthesizerがプログラムを保持します。 Speak()の代わりにSpeakAsync()を使用するか、ティック内の関数でプログラムのUIをブロックしたくない場合は、ティックを実行する新しいスレッドを開始することができます。

関連する問題