0

,我已经编写了以下代码,但仅在音频文件离开“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
            }
        }
4

2 回答 2

0

您可以使用 Microsoft 的反应式框架(又名 Rx)。NuGetSystem.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();
        });
}
于 2019-02-21T10:20:56.143 回答
0

感谢您的回答,您的代码解决了我的问题。

但是当运行从“ 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> 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 -Pre Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02(您必须连接到 Internet)

于 2019-02-21T23:31:25.243 回答