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
(您必须连接到互联网)
嗨 我已经编写了以下代码,但在离开 "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 (您必须连接到互联网)