AccessViolation исключение, когда форма с AxWindowsMediaPlayer закрыта - PullRequest
3 голосов
/ 26 марта 2009

У меня есть AxWMPLib.AxWindowsMediaPlayer в форме. Когда я закрываю форму, я получаю сообщение «Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена». исключение. Это нормально с сокрытием формы, но не с закрытием. Все хорошо, когда компонент удален из формы.

Это Winforms .Net3.5.

Любая помощь приветствуется.

Ответы [ 4 ]

3 голосов
/ 27 мая 2010

Это происходило со мной, и это было при закрытии формы во время нажатия клавиши.

Похоже, что элемент управления 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.

То же самое происходит, когда форма закрыта, поскольку будет распоряжаться элементом управления.

2 голосов
/ 10 сентября 2009

Иногда при работе с объектами ActiveX в приложениях .NET необходимо принудительно собирать мусор при выходе. Я обычно делаю это в Form_Closing используя:

GC.WaitForPendingFinalizers()
GC.Collect()

Также, если вы настроили какие-либо обработчики событий для объекта, вы захотите отключить их явно. Я неоднократно обнаруживал, что объекты ActiveX по-прежнему остаются активными в мусорном баке и пытаются вызывать обработчик событий даже после их удаления.

Может также стоить убедиться, что воспроизведение остановлено, прежде чем пытаться утилизировать объект.

0 голосов
/ 14 января 2014

Я думаю, что у меня есть:

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 голосов
/ 26 марта 2009

Объекты ActiveX могут иметь некоторые чувствительные зависимости от закрытия в правильном порядке при закрытии родительской формы, в противном случае они могут жить до тех пор, пока не запустится gc - попробуйте поискать в интерфейсе элемента управления любые методы, которые выглядят так, как они могут связано с закрытием или уничтожением объекта и вызовом его.

...