C# - 我希望我的播放器在播放任何文件之前延迟 2 秒并在循环中重复播放 (For)

C# - I want my player to delay 2 seconds before playing any file and repeat it in the loop(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:36.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
            }
        }

您可以使用 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=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

为了解决这个问题,我进行了三个步骤,直到问题解决。

1) 安装 nuget-client-tools (例如,您可以从以下站点获取: “https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli” 或 " https://www.nuget.org/downloads " 或 ... )

然后在包管理器控制台运行下面的两个命令:

2) PM> 安装包 System.Reactive - 版本 4.1.3

3) PM> 安装包 NETStandard.Library.NETFramework -版本 2.0.0-preview2-25405-01 -Pre PM>Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre OR 安装包 NETStandard.Library.NETFramework -版本 2.0.0-preview1-25305-02 (您必须连接到互联网)