Jud*_*ngo 13 c# audio winforms
这是一个看似简单的问题:
在Windows窗体中异步播放嵌入式.wav资源文件的正确方法是什么?
尝试#1:
var player = new SoundPlayer();
player.Stream = Resources.ResourceManager.GetStream("mySound");
player.Play(); // Note that Play is asynchronous
Run Code Online (Sandbox Code Playgroud)
尝试#2:
using (var audioMemory = Resources.ResourceManager.GetStream("mySound"))
{
using (var player = new SoundPlayer(audioMemory))
{
player.Play();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试#3:
using (var audioMemory = Resources.ResourceManager.GetStream("mySound"))
{
using (var player = new SoundPlayer(audioMemory))
{
player.PlaySync();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试#4:
ThreadPool.QueueUserWorkItem(ignoredState =>
{
using (var audioMemory = Resources.ResourceManager.GetStream("mySound"))
{
using (var player = new SoundPlayer(audioMemory))
{
player.PlaySync();
}
}
});
Run Code Online (Sandbox Code Playgroud)
看起来SoundPlayer应该有一个PlayAsyncCompleted事件.不幸的是,不存在此类事件.我错过了什么吗?在Windows窗体中异步播放.wav嵌入式资源的正确方法是什么?
我没有足够的声誉来评论,所以我只是回答.
如果您播放声音的要求"看似简单"(您只想在单个winform用户执行某些操作时偶尔播放声音),那么我将使用上面的尝试#4.
拉里·奥斯特曼(Larry Osterman)的"这个代码部分26有什么问题"让他的"系统"在每次按键时都会关闭一个新的线程池线程(播放声音).他指出,在敲打它的过程中,在大约15秒内打破了默认的500线程池大小,但这也是使用异步RPC同时使用线程池的客户端/服务器应用程序.真的不是一个"看似简单"的应用程序.
如果您尝试每秒(或更快)将声音字节排队10秒或100秒,那么它实际上不是"简单应用程序",排队的线程/优先级子系统可能是有序的.
| 归档时间: |
|
| 查看次数: |
18118 次 |
| 最近记录: |