2012-01-27 6 views
1

Я создаю объект медиаплеера в простом консольном приложении, чтобы воспроизвести некоторые файлы. Хотя медиа-плеер успешно запускается, когда я использую метод close(), процесс все еще выполняется, а окно медиаплеера не закрывается. Что должно быть сделано? вот код, который я написал.Почему медиаплеер Windows не закрывается с помощью player.Close()?

WindowsMediaPlayer player= new WindowsMediaPlayer(); 
player.OpenPlayer("c:\\abc.wmv"); 
Thread.Sleep(2000); 
player.controls.stop(); 
player.close(); 

Здесь процесс не выходит, и файл все еще работает. Как закрыть приложение?

+0

Да .close() этого не сделает. Согласно документам: «Этот метод закрывает текущий цифровой мультимедийный файл, а не сам проигрыватель Windows Media». http://msdn.microsoft.com/en-us/library/windows/desktop/dd562399%28v=vs.85%29.aspx Кажется, я ничего не могу найти при выходе из процесса. – bschultz

+0

Я не уверен, что это будет работать, но попробуйте Environment.Exit (exitCode). Убедитесь, что у вас есть разрешение SecurityPermissionFlag.UnmanagedCode. Как я уже сказал, я не знаю, будет ли это работать, но это стоит выстрелить. – bschultz

ответ

0

Я думаю, вам нужно закрыть COM-объект, вызвав Marshal.ReleaseComObject. COM не знает, что вы больше никогда не будете использовать плеер, поэтому он не сможет закрыть процесс.

Не полагайтесь на сборку мусора, потому что это может не произойти, если нет давления памяти. Вызовите Marshal.ReleaseComObject вручную.

+0

Я тоже пробовал. Тем не менее он не вышел из процесса. Окно медиаплеера все еще запускает файл. Не знаю, почему метод stop() также не работает в описанном выше сценарии. Однако я попытался с другим подходом, где работает stop(). например Player.URL = "c: \\ abc.wmv"; player.controls.play(); player.controls.stop(); Но проблема здесь в том, что нет окна отображения. Я слышал только аудио – satya

+0

Вам нужно уничтожить объекты _all_ COM. может быть, у вас есть подобъект, такой как player.playlist? Все, к чему вы когда-либо обращались, было бы причиной этой проблемы. Попробуйте вызвать GC.Collect() и GC.WaitForPendingFinalizer() и посмотреть, не исчезла ли проблема. – usr

+0

Попробуйте следующее: Marshal.ReleaseComObject (новый WindowsMediaPlayer()). Остается ли процесс еще не завершен? – usr

1

Интерфейс автоматизации не имеет возможности заставить игрока выйти. Менее идеальный подход, чтобы убить его:

 var prc = Process.GetProcessesByName("wmplayer"); 
     if (prc.Length > 0) prc[prc.Length - 1].Kill(); 

лучше ловушка мыши, чтобы встроить плеер в свой собственный графический интерфейс, легко сделать с Winforms.

 Смежные вопросы

  • Нет связанных вопросов^_^