2016-11-03 2 views
0

Der folgende Code, bei dem timer_tick-Ereignis nach einer Bedingung sucht, um eine Text-zu-Sprache- und Audiodateiwiedergabe auszulösen. Wenn die Bedingungen erfüllt sind, werden die Ergebnisse wie erwartet erhalten, das Programm bleibt jedoch stehen.Timer_Tick friert das Programm ein

Auch, wie ein Popup-Meldungsfeld hinzugefügt wird, wenn diese Bedingung übereinstimmt. Es ist in Ordnung, wenn Audiodatei oder Sprache wiederholt werden, aber ich möchte nicht wiederholt Nachrichtenfelder öffnen, wenn der Timer tickt.

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

Verwenden Sie die [Speechsynthesizer Klasse] (https://msdn.microsoft.com/en-us/library/office/system.speech.synthesis.speechsynthesizer.aspx)? Wenn ja, versuche "SpeakAsync" anstelle von "Speak". – adv12

+0

Großartig. Das funktioniert super, danke. Irgendeine Idee über eine Nachrichtenbox? –

Antwort

0

SpeechSynthesizer hält das Programm, wenn die Speak-Funktion verwendet wird. Versuchen Sie SpeakAsync() statt Speak() verwenden, oder Sie können einen neuen Thread starten, der die Zecke läuft, wenn Sie die Benutzeroberfläche des Programms nicht blockieren die Funktionen innerhalb Ihres tick möchten.