我目前正在使用 .NET 4.5。对照相亭进行编程。照相亭应该以全屏方式启动:
- 显示带有介绍视频的介绍屏幕。
- 当用户点击屏幕时,它必须显示一个准备就绪!视频
- 准备好的视频播放完毕后,必须显示倒计时视频
- 当倒计时视频结束时,它必须拍照。
现在我可以做#1和#2。我也可以拍照。我的问题是顺序。视频完成后,我需要更改视频,但由于所有内容都在事件处理程序中运行,因此它仅在程序运行事件处理程序时播放视频。
有没有更好更聪明的方法来做到这一点?
这是我的代码:
我现在拥有和工作的东西:
private void Form1_Load(object sender, EventArgs e)
{
// maximize the screen
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
TopMost = true;
// play an intro video without the UI controls
this.videoPath = this.basePath + "intro.mp4";
this.wmpVideo.URL = this.videoPath;
this.wmpVideo.settings.setMode("Loop", true);
this.wmpVideo.Ctlcontrols.play();
this.wmpVideo.uiMode = "none";
}
然后,如果用户点击视频,它会将视频更改为新文件:
private void wmpVideo_MouseDownEvent(object sender, AxWMPLib._WMPOCXEvents_MouseDownEvent e)
{
if (this.current == 0) //this means that currently we are in the intro
{
// Then I change the video to "get ready!"
this.changeVideo("getready.mp4",1);
}
changeVideo 基本上将视频更新为 getready.mp4。然后,我需要将其更改为 countdown.mp4。为了从一个视频移动到另一个视频,我需要检查视频何时结束。我现在这样做:
wmpVideo.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(checkGetReadyFinished);
事件处理程序如下所示:
private void checkGetReadyFinished(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (e.newState == 8) {
// If we are currently in the "getready state"
if (this.current == 1)
{
// then I change the video to the countdown.mp4
this.changeVideo("countdown.mp4", 2);
}
}
}
问题
我注意到视频仅在我使用事件处理程序方法时播放。我意识到这一点是因为我看到没有播放视频,所以我在changeVideo方法中添加了一个MessageBox。我看到只要 MessageBox 显示,视频就在播放。当我点击“确定”时,视频消失在 IE 中,我需要停留在事件处理方法中。
问题
有没有其他更好的方法来显示 video1,然后在 video1 完成时显示 video2。正如我所提到的,我需要做一个照相亭程序。
我也尝试调用另一个表单,但是一旦我将其设置为全屏,屏幕就会闪烁。
有没有最佳的方法来做到这一点?