Как повторно проверить состояние - PullRequest
0 голосов
/ 20 марта 2020

Когда-то go я задал вопрос о воспроизведении файлов .mp3 в программе C#. Поскольку ответы были действительно полезны, я решил задать еще один вопрос здесь. У меня есть код:

WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();

if (wplayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
{
     *something to do...*
}
else
{
}

Между скобками для «еще» мне нужно узнать мою программу примерно так: «Когда изменение состояния игры возвращается к этому условию if» (что в основном означает сказать ему: « Только если PlayState изменится на «media end», делайте то, что я пишу в что-то, что нужно сделать ») Так что это мой вопрос. Как это сделать? Есть ли какая-нибудь команда для проверки значения или что-то, что мне поможет? Спасибо за ваш ответ!

1 Ответ

0 голосов
/ 22 марта 2020

Ознакомьтесь с полной документацией по событию PlayStateChange, поддерживаемому WindowsMediaPlayer

Если вы не знаете, что такое event в C#:

События служат той цели, которую вы описали - они уведомляют, когда что-то происходит (момент, когда и почему происходит это что-то , определяется разработчиками классов). В нашем случае WindowsMediaPlayer имеет событие PlayStateChange, которое запускается при изменении состояния воспроизведения объекта.

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

Для этого вы пишете свою собственную функцию (которая обычно называется handler ). Эта функция должна иметь определенную подпись - она ​​должна возвращать void и принимать два аргумента: первый тип object (который можно преобразовать в тип WindowsMediaPlayer, поскольку этот тип является источником нашего события) и второй из некоторых введите с дополнительными данными о событии)

Пример прямо из ссылки выше:

private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
   // this code is executed when the playstate changed
   // no need to check - developers of the WindowsMediaPlayer class
   // tell you, that it happened, by calling this function
   // they even give you some data about this changed state via arguments (sender and e above)

   // Test the current state of the player and display a message for each state.
   switch (e.newState)
   {
        case 0:    // Undefined
            currentStateLabel.Text = "Undefined";
            break;

        case 1:    // Stopped
            currentStateLabel.Text = "Stopped";
            break;
        ... // check the link for more states
   }
}

Далее вы должны подписать эту недавно написанную функцию для события. Поэтому, когда состояние воспроизведения изменяется, класс player будет вызывать нашу функцию:

// Add a delegate for the PlayStateChange event.
player.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange);

Итак, в основном, у вас есть функция player_PlayStateChange, принимающая два аргумента о событии, и эта функция вызывается, когда PlayStateChange событие player объекта запущено. Запутывающий AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler - это класс, который просто оборачивает нашу функцию, вы можете присоединить функцию только после ее обертывания.

Я рекомендую вам узнать больше о событиях и делегатах в C# на более простых и понятных примеры или учебники. Концепция событий имеет решающее значение для программирования.

...