Как воспроизвести звук в WPF - PullRequest
1 голос
/ 02 декабря 2009

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

Ответы [ 3 ]

6 голосов
/ 02 декабря 2009

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

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.

3 голосов
/ 02 декабря 2009

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

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

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

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

в файле xaml.

0 голосов
/ 19 августа 2012

Решением вашего исходного вопроса является добавление LoadedBehavior = "Manual" к вашему MediaElement в вашем XAML. E.g.:

<MediaElement Source="Samples/robot.wmv" LoadedBehavior="Manual" />
...