为什么调用waveOutGetPosition会挂起?

时间:2010-03-15 05:27:18

标签: c# audio windows-vista

我正在使用winmm.dll API方法waveOutGetPosition来获取WAV文件播放的当前位置。有时这对我来说是预期的,但最终其中一个调用永远不会返回,我的应用程序会锁定。

我发现这个帖子中有一些用户经历过同样的问题:

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c6a1e80e-4a18-47e7-af11-56a89f638ad7

但没有解决方案。有没有人遇到过这个问题?

更新:我能够创建一个可靠地再现问题的示例应用:

Problem with waveOutWrite and waveOutGetPosition deadlock

但仍然没有修复它。

2 个答案:

答案 0 :(得分:0)

你可以在自己的线程中锁定调用并在确定的时间后将其终止,而不是让它挂起你的应用程序吗?不会真正解决问题,但它至少会让你继续。

答案 1 :(得分:0)

解决方案是使用MessageWindow而不是回调 - MessageWindow允许waveOutGetPosition成功返回而不会发生死锁。