我在做一些应该很简单的事情时遇到一些麻烦,我使用一个简单的图形界面来显示来自kinect传感器的数据,我想创建一个转换,也就是说,我想向用户显示一个视频然后我希望程序恢复运行。我的代码是这样的:
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
Random random = new Random();
int periodo=random.Next(9000,20000);
contador.Interval = periodo;
this.Dispatcher.Invoke(new Action(CreateTextBox),null);
this.Dispatcher.Invoke(new Action(StopThread), null);
this.Dispatcher.Invoke(new Action(Advance), null);
this.Dispatcher.Invoke(new Action(ResetTime), null);
this.Dispatcher.Invoke(new Action(ShowSample), null);
}
这会创建一个计时器,其随机时间介于9到20秒之间。之后我想做一系列事情,这些事情是: 在UI中显示消息 停止UI中的所有活动 在UI中显示视频 重置变量 显示视频序列
使用的函数是:
private void CreateTextBox() {
TextBox textBox = new TextBox {
FontSize=40,
};
textBox.Text = "Siguiente Actividad";
canvas2.Children.Add(textBox);
// System.Threading.Thread.Sleep(1000);
}
private void ResetTime() {
contadorsegundos = 0;
}
private void StopThread(){
System.Threading.Thread.Sleep(8000);
}
private void ShowSample() {
canvas2.Children.Clear();
MediaElement mediaElement2 = new MediaElement();
canvas2.Children.Add(mediaElement2);
string location = "C:\\Users\\PALMA\\Documents\\Visual Studio 2010\\Projects\\Interfaz\\Interfaz\\Videos\\ejercicio1.mp4";
try
{
mediaElement2.Source = new Uri(location);
mediaElement2.Play();
//MessageBox.Show(final);
}
catch
{
//no se atiende la excepción
//MessageBox.Show("Not Found");
}
}
主线程停止了8秒,但是texbox从未显示过,即使在函数StopThread之前调用函数CreateTextBox,我还是希望显示消息,然后线程就会停止。
非常感谢任何帮助。
答案 0 :(得分:0)
您应该使用:
,而不是让主线程休眠8秒钟await Task.Delay(8000);
这样可以避免冻结主线程,这可能会导致各种不可预测的问题。