2009-12-01 2 views
1

Я новичок программист на C# и у меня проблемы с музыкой, чтобы играть в моем приложении WPF (Windows), используя VS 2008. Это веб-приложение. Я думаю, что это myMediaElementExample переменная пуста в то время, когда она используется для выполнения метода Play в файле ExpenseReportPage.xaml.cs.Как играть звук в WPF

Прямо сейчас эта программа строит, но после ее запуска она встречает исключение на линии myMediaElementExample.Play();. Исключение составляет:

An unhandled win32 exception occurred in the WpfApplication1.vhost.exe [948]. 

Может ли кто-нибудь из вас дать мне советы о том, что еще я могу попробовать? Я только включил код, имеющие отношение к этой проблеме:

ExpenseReportPage.xaml.cs файла:

namespace ExpenseIt 
{ 
    public partial class ExpenseReportPage : Page 
    { 
... } 

    public partial class MediaElementExample : Page 
    { 
     MediaElement myMediaElementExample = new MediaElement(); 

     public MediaElementExample() 
     { 
     } 

     public void OnMouseDownPlayMedia(object sender, RoutedEventArgs args) //MouseButtonEventArgs 
     { 
      // The Play method will begin the media if it is not currently active or 
      // resume media if it is paused. This has no effect if the media is 
      // already running. 
      myMediaElementExample.Play(); 
     } 
    } 
} 

HomePage.xaml.cs файла:

namespace ExpenseIt 
{ 
    public partial class HomePage : Page 
    { 
     MediaElementExample mediaElementExample = new MediaElementExample(); 

     public HomePage() 
     { 
      InitializeComponent(); 
     }   
     void HandleClick(object sender, RoutedEventArgs e) 
      { 
       Button srcButton = e.Source as Button; 
       srcButton.Width = 200; 
       mediaElementExample.OnMouseDownPlayMedia(sender, e); 
      } 
    } 
} 
+1

Ничего себе, я ожидал легкий доступ. –

+0

Где вы устанавливаете медиа-источник, т. Е. Mp3/wav? – kiwipom

ответ

6

Для целей отладки окружают линию :

myMediaElementExample.Play(); 

с try{} catch{} блока:

try 
{ 
    myMediaElementExample.Play(); 
} 
catch (Exception ex) 
{ 
    // Either print out the exception or examine it in the debugger. 
} 

Это даст вам больше информации о том, что вызывает исключение. Если до сих пор неясно, обновите вопрос с помощью этой новой информации.

Если myMediaElementExample был пустым, тогда я ожидал бы, что вы получите System.NullReferenceException, а не win32, который вы видите. Вы можете проверить это, установив точку останова на линии myMediaElementExample.Play(); и изучив ее.

После того, как вы нашли и устранили проблему, вы можете удалить обработчик исключений или если вы хотите быть осторожным, оставьте его, но только поймайте исключения, которые поднимает MediaElement.Play.

+0

+1 для защитного программирования. Для дополнительного бонуса вы можете настроить регистратор для отправки вам подробных сведений об исключениях. –

3

Спасибо Крис и Норла. Я нашел причину исключения:

Cannot control media unless LoadedBehavior or UnloadedBehavior is set to Manual. 

Однако я нашел очень легкое обходное решение! Я googled решение:

<MediaElement Source="The Boogie Monster.mp3" /> 

в файле xaml.

0

Решение вашего первоначального вопроса заключается в том, чтобы добавить LoadedBehavior = "Manual" в ваш MediaElement в вашем XAML. Например:

<MediaElement Source="Samples/robot.wmv" LoadedBehavior="Manual" /> 
Смежные вопросы