C# - я хочу, чтобы мой проигрыватель задерживал 2 секунды перед воспроизведением любого файла и повторял его в цикле (For)

Привет, я написал следующий код, но только один раз воспроизводит аудиофайл после того, как он покинул событие "dataGridView1_CellClick". Я хочу знать:


1) Можно ли воспроизвести звук на мероприятии?


2) Могу ли я повторить трансляцию, не используя "Player.settings.playCount"? Потому что этот код нельзя отложить до выпуска каждого файла. Спасибо

Мой код:

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

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{

    //...

    //********** Play audio of Word
    // sVoicePath = @"C:\4536.mp3"
      sVoicePath = Application.StartupPath + dataGridView1.CurrentRow.Cells[4].Value.ToString();
      PlayFile(sVoicePath);
    //...
}

//*****************************
private void PlayFile(String url)
        {
            for (int i = 0; i < 3 ;i++)
            {
                System.Threading.Thread.Sleep(2000);
                Player.URL = url;
                Player.controls.play();
            }
        }
//*****************************
        private void Player_PlayStateChange(int NewState)
        {
            if ((WMPLib.WMPPlayState)NewState == 
                    WMPLib.WMPPlayState.wmppsStopped)
            {
                //Actions on stop
            }
        }

2 ответа

Решение

Вы можете использовать Microsoft Reactive Framework (также известный как Rx). NuGet System.Reactive и добавить using System.Reactive.Linq к вашему коду. Тогда вы можете сделать это:

private void PlayFile(String url)
{
    Observable
        .Interval(TimeSpan.FromSeconds(1.0))
        .Take(3)
        .Subscribe(x =>
        {
            Player.URL = url;
            Player.controls.play();
        });
}

Спасибо за ваш ответ, ваш код решил мою проблему.

Но звук все еще воспроизводится, когда цикл запускается из события "dataGridView1_CellClick". Можно ли транслировать звук, когда выполнение программы все еще находится в функции PlayFile(String url)?


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

Ошибка CS0012 Тип 'IObservable<>' определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку 'netstandard, Version=2.0.0.0, Culture= нейтральный, PublicKeyToken=cc7b13ffcd2ddd51'.

Чтобы решить эту проблему, я выполнил три шага, пока проблема не была решена.

1) установить nuget-client-tools (Вы можете получить, например, со следующих сайтов: " https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools " ИЛИ " https://www.nuget.org/downloads " ИЛИ...)

Затем в консоли диспетчера пакетов выполните две команды ниже:

2) PM> Install-Package System.Reactive -Version 4.1.3

3) PM> Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre или PM>Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Пред ИЛИ Пакет установки NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 (необходимо подключиться к Интернету)

Другие вопросы по тегам