Как воспроизвести звук в WPF

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

Сейчас эта программа собирается, но после того, как я ее запустил, она обнаружила исключение в строке 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);
            }
    }
}

person salvationishere    schedule 01.12.2009    source источник
comment
Вау, я ожидал легкого.   -  person Andy West    schedule 02.12.2009
comment
Где вы устанавливаете источник мультимедиа, то есть mp3/wav для воспроизведения?   -  person kiwipom    schedule 02.12.2009


Ответы (3)


В целях отладки окружите строку:

myMediaElementExample.Play();

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

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

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

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

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

person ChrisF    schedule 01.12.2009
comment
+1 за защитное программирование. В качестве дополнительного бонуса вы можете настроить регистратор, который будет отправлять вам по электронной почте сведения об исключении. - person Nick Vaccaro; 02.12.2009

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

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

Однако я нашел действительно простой обходной путь! Я погуглил решение:

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

в xaml-файле.

person salvationishere    schedule 01.12.2009

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

<MediaElement Source="Samples/robot.wmv" LoadedBehavior="Manual" />
person Dan Gøran Lunde    schedule 19.08.2012