我有一个程序可以从队列中播放视频“.mov”。如果队列中没有视频,则重新加载“吸引循环”视频。我正在使用电影结束时触发的事件处理程序“qtEventMovieDidEnd”。此事件处理程序在触发时询问队列中是否有任何电影,如果没有,它会重新加载吸引循环文件并应该播放它。我的问题是,当事件在电影结束时触发时,它会尝试重新加载文件并抛出错误“System.Windows.Forms.dll 中发生'System.AccessViolationException'类型的未处理异常”。我可以删除事件处理程序并使用按钮单击事件手动加载任何电影并以这种方式加载它,当我这样做时它工作得很好。该错误将 Visual Studio .net 2005 发送到我的“program.cs”文件并退出。
为什么事件处理程序会抛出错误,但是当我手动加载电影时效果很好?
我的代码中的方法:
private void addMovieEventListeners(QTMovie myMovie)
{
// Make sure a movie is loaded first
if (myMovie == null)return;
myMovie.EventListeners.Add(QTOLibrary.QTEventClassesEnum.qtEventClassStateChange,
QTEventIDsEnum.qtEventMovieDidEnd, null, null);
}
public void PlayMovie(string movie)
{
axQTControl1.URL = movie;
addMovieEventListeners(axQTControl1.Movie);
axQTControl1.Movie.Play(1.0);
frm1.lblMoviePlaying.Text = axQTControl1.Movie.URL;
}
private void axQTControl1_QTEvent(object sender, _IQTControlEvents_QTEventEvent e)
{
if (e.eventID == (int)QTEventIDsEnum.qtEventMovieDidEnd)
{
axQTControl1.Movie.EventListeners.RemoveAll();
//MessageBox.Show("Movie Ended");
PlayMovie(@"C:\AttractLoop\AttractLoop.mov");
}
}