需求是这样的,winform程序,轮播文本、视频、图片,播放文本时暂停5秒,接着播放视频,视频播放完成后,播放图片。如果在winformUI界面中编写所有代码,thread.sleep将会影响文本、视频、图片的显示
如果文本、视频、图片分别使用线程,又有很多意想不到的问题winform程序主窗体内有一个picturebox,一个Label,一个mediaplay播放器下面程序不能如预想的那样,顺序播放,顺序隐藏,求高手指点 //锁住主程序
lock (obj_main_main)
{
//屏幕对应的节目元素列表
List<MODEL.PROGRAMELEModel> modelList = comm.programEleModel("P1"); for (int jj = 0; jj < modelList.Count; jj++)
{
//锁住循环内程序
lock (obj_main)
{
if (modelList[jj]._eletype.Equals("1"))
{
//不为空播放文本
if (!modelList[jj]._chartextmodel._content.Trim().Equals(""))
{
Thread t2 = new Thread(showchartex_task);//处理文本的线程
t2.Start();
Thread.Sleep(10000);
label1.Visible = false;//隐藏文本
}
} //判断是否视频
if (modelList[jj]._eletype.Equals("2"))
{
//pictureBox1.Controls.Clear();
//不为空播放视频
if (!modelList[jj].filepath.Trim().Equals(""))
{
Thread t2 = new Thread(showvideo_task);//处理视频的线程
t2.Start();
Thread.Sleep(10000);
axWindowsMediaPlayer1.Width = 300;//隐藏线程
}
} //判断是否图片
if (modelList[jj]._eletype.Equals("3"))
{
Thread t2 = new Thread(showpic_task);//处理图片的线程,将生成的图片add进pictureBox中
t2.Start();
Thread.Sleep(10000);
pictureBox1.Controls.Clear();
pictureBox1.Refresh();
}
}
}
}
如果文本、视频、图片分别使用线程,又有很多意想不到的问题winform程序主窗体内有一个picturebox,一个Label,一个mediaplay播放器下面程序不能如预想的那样,顺序播放,顺序隐藏,求高手指点 //锁住主程序
lock (obj_main_main)
{
//屏幕对应的节目元素列表
List<MODEL.PROGRAMELEModel> modelList = comm.programEleModel("P1"); for (int jj = 0; jj < modelList.Count; jj++)
{
//锁住循环内程序
lock (obj_main)
{
if (modelList[jj]._eletype.Equals("1"))
{
//不为空播放文本
if (!modelList[jj]._chartextmodel._content.Trim().Equals(""))
{
Thread t2 = new Thread(showchartex_task);//处理文本的线程
t2.Start();
Thread.Sleep(10000);
label1.Visible = false;//隐藏文本
}
} //判断是否视频
if (modelList[jj]._eletype.Equals("2"))
{
//pictureBox1.Controls.Clear();
//不为空播放视频
if (!modelList[jj].filepath.Trim().Equals(""))
{
Thread t2 = new Thread(showvideo_task);//处理视频的线程
t2.Start();
Thread.Sleep(10000);
axWindowsMediaPlayer1.Width = 300;//隐藏线程
}
} //判断是否图片
if (modelList[jj]._eletype.Equals("3"))
{
Thread t2 = new Thread(showpic_task);//处理图片的线程,将生成的图片add进pictureBox中
t2.Start();
Thread.Sleep(10000);
pictureBox1.Controls.Clear();
pictureBox1.Refresh();
}
}
}
}
http://msdn.microsoft.com/zh-cn/library/vstudio/dd321321.aspx
你可以使用一个委托(即要执行的显示文本的方法)初始化一个Task对象,然后调用Task.Run方法,然后再调用Wait方法等待一段时间,此时不会堵塞UI线程的,但是会堵塞线程池线程,等待一段时间之后再调用Task.ContinueWith方法来执行另外一个方法,即显示视频,显示图片的过程也是一样的
Thread t2 = new Thread(showchartex_task);//处理文本的线程
t2.Start();
Thread.Sleep(10000);
label1.Visible = false;//隐藏文本t2线程start以后你立马让UI线程睡大觉去了,这段睡大觉的时间里,t2线程可能需要通知UI线程更新UI界面,等他Thread.Sleep(10000);以后,你又告诉需要更新的label控件:我不需要你了,该干嘛干嘛去!