1

キューからビデオ「.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");
    }
}
4

0 に答える 0