c# - C#中wav文件播放循环之间的间隔

标签 c#

我有 4 秒的 wav 文件。我可以循环播放

System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.Stream = Properties.Resources.ringtone;
player.PlayLooping();

但是在再次播放 wav 之前我需要 2 秒的间隔。

我的意思是4秒(有声)+ 2秒(无声音)+ 4秒(有声)等等...

怎么可能。

最佳答案

因此,在进行了一系列线程处理和线程池工作之后,我清楚地意识到,如果您有一个长时间运行的线程,则应该避免从线程池中“窃取”线程。 .NET(以及最近的 .NET Core)中的线程池主要用于可能存在大量多线程工作的快速异步工作。它们是专门为此设计的,窃取一个可能会导致各种问题,特别是因为其他一些重要工作无法从线程池中获得空闲线程来完成它的工作,坦率地说,您应该避免它。

每当您需要长时间运行的操作(例如应用程序的生命周期)时,最好手动生成一个新线程并使用它。只是不要忘记将其标记为后台线程,这样就可以了。

using System.Threading;
using System.Threading.Tasks;

System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.Stream = Properties.Resources.ringtone;

private void LoopSong()
{
     while(true)
     {
         player.Play();
         Thread.Sleep(2000);
     }
}

var thread = new Thread(LoopSong) 
{
    IsBackground = true
};
thread.Start();

下面的代码是错误的,请勿使用

using System.Threading;
using System.Threading.Tasks;

System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.Stream = Properties.Resources.ringtone;

Task.Run(()=>
{
     while (true)
     {
        player.Play();
        Thread.Sleep(2000);
     }
});

如果你不想阻塞gui,你需要放入后台线程。

关于c# - C#中wav文件播放循环之间的间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407866/

相关文章:

c# - 在 C# 中为类实现 == 运算符的最佳做法是什么?

c# - Microsoft.Graph api 设置用户扩展属性

c# - 我的 PDF 语法坏了!如何将图像放入PDF?

c# - 如何用字母创建按字母顺序排列的列表?

javascript - 如何从 asp.net 核心 View 更新 javascript 中的模型值

c# - 使用 IdentityServer4 加载项目时 DefaultUserSession 中的 NullReferenceException

c# - 什么时候应该使用 ThrowHelper 方法而不是直接抛出?

c# - 在我的 .aspx 页面上循环遍历 SQL Server 结果

c# - 从 C# 访问 COM 对象的最佳方式

javascript - 返回响应头 OnAuthenticationFailed