キューからビデオ「.mov」を再生するプログラムがあります。キューにビデオがない場合、「attractloop」ビデオがリロードされます。映画の終了時に起動するイベントハンドラー「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");
}
}