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

问题描述 投票:0回答:2

嗨我写了下面的代码,但只有一次播放音频文件后,它离开“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
            }
        }
c# for-loop thread-sleep wmplib
2个回答
0
投票

您可以使用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();
        });
}

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”或......)

然后在Package Manager Console中运行以下命令:

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

3)PM>安装包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 OR安装包NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02(你必须连接到Internet)

© www.soinside.com 2019 - 2024. All rights reserved.