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 (необходимо подключиться к Интернету)