嗨我写了下面的代码,但只有一次播放音频文件后,它离开“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
}
}
您可以使用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”或......)
然后在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)