2009-03-26 15 views
2

フォームにAxWMPLib.AxWindowsMediaPlayerがあります。フォームを閉じると、「保護されたメモリを読み書きしようとしましたが、これはしばしば他のメモリが壊れていることを示しています。例外。フォームを隠すことでOKですが、閉じてはいけません。コンポーネントがフォームから削除されても問題ありません。AxWindowsMediaPlayerでフォームを閉じたときのアクセス違反の例外

これはWinforms .Net3.5です。

助けてください。

+0

ここでも解決策を見つけようとしています。 –

答えて

0

ActiveXオブジェクトは、親フォームが閉じられているときに正しい順序で閉じられるかどうかに依存する可能性があります。そうでない場合、gcが実行されるまで生き続ける可能性があります。オブジェクトを閉じたり、破壊したり、それらを呼び出すことと関連しているかもしれません。

+1

私は、元のURLをリセット、閉鎖、処分、運がない、停止しようとしました。エラーが発生した場所を見つけることで問題に近づくことはできますか?私はまだイベントログをチェックしていない。 – David

2

.NETアプリケーションでActiveXオブジェクトを操作するときに、終了時に強制的にガベージコレクションを行う必要があります。私は、一般的に使用してForm_Closingでこれを行います。また

GC.WaitForPendingFinalizers() 
GC.Collect() 

、あなたはセットアップにオブジェクトのイベントハンドラを持っている場合は、明示的にそれらを切断することになるでしょう。私は、ActiveXオブジェクトがまだゴミ箱にアクティブなままであり、それらが破棄された後でもイベントハンドラを呼び出そうと試みることを、いくつか発見しました。

オブジェクトの破棄を試みる前に、再生が停止していることを確認することもできます。

+1

私は実際に 'axWindowsMediaPlayer1.Dispose();を実行しています。 GC.WaitForPendingFinalizers(); '_FormClosing()'イベントの中で、GC.Collect(); 'が役に立ちました。 –

+0

まだそれはありません...まだ違反です。 –

2

これは私には起こっていました。キーを押している間にフォームを閉じるときでした。

処理するキーイベントがあると、WMPコントロールで問題が発生するようです。 Form.KeyPreview = Trueの

Sub Form_KeyDown(e As KeyEventArgs) 
AxWindowsMediaPlayer1.Dispose() 
End Sub 

の例は、アクセス違反が発生します。

Sub Form_KeyDown(e As KeyEventArgs) 
e.Handled = True 
AxWindowsMediaPlayer1.Dispose() 
End Sub 

キープレスがWMPコントロールに到達するのをブロックするため、正常に終了します。

コントロールを廃棄するようにフォームが閉じられても同じことが起こります。

+1

魅力的なように働いた。ありがとうございました – Jason

0

私はそれを持っていると思う:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    axWindowsMediaPlayer1.close(); 
} 

は単に私はそれをやってみると思ったドキュメントhttp://msdn.microsoft.com/en-us/library/windows/desktop/dd562388(v=vs.85).aspx に方法を見つけました。今ははるかに良いようです。

+0

いいえすべての後もいいです。私たちが好きなことをすることができます、このコントロールは、物語の終わり、盗まれています。時間があれば、このマイクロソフトの恐怖を取り除き、VLCライブラリを使用します。 –

関連する問題