c# - 如何在C#中播放SystemSound并等待其完成?

标签 c# audio system-sounds

您可以按以下方式播放系统声音:

SystemSounds.Asterisk.Play();

但是它异步播放。通常可以,但是我要等待它完成,然后再运行其他代码。这该怎么做?

最佳答案

这不是唯一的解决方案,而是我想到的。

您可以使用PlaySound API(https://docs.microsoft.com/en-us/previous-versions/dd743680(v%3Dvs.85))执行此操作。

使用DllImport引入引用:

internal static class Win32
{
    [DllImport("winmm.dll", SetLastError = true)]
    public static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);

    [Flags]
    public enum SoundFlags
    {
        /// <summary>play synchronously (default)</summary>
        SND_SYNC = 0x0000,
        /// <summary>play asynchronously</summary>
        SND_ASYNC = 0x0001,
        /// <summary>silence (!default) if sound not found</summary>
        SND_NODEFAULT = 0x0002,
        /// <summary>pszSound points to a memory file</summary>
        SND_MEMORY = 0x0004,
        /// <summary>loop the sound until next sndPlaySound</summary>
        SND_LOOP = 0x0008,
        /// <summary>don't stop any currently playing sound</summary>
        SND_NOSTOP = 0x0010,
        /// <summary>Stop Playing Wave</summary>
        SND_PURGE = 0x40,
        /// <summary>The pszSound parameter is an application-specific alias in the registry. You can combine this flag with the SND_ALIAS or SND_ALIAS_ID flag to specify an application-defined sound alias.</summary>
        SND_APPLICATION = 0x80,
        /// <summary>don't wait if the driver is busy</summary>
        SND_NOWAIT = 0x00002000,
        /// <summary>name is a registry alias</summary>
        SND_ALIAS = 0x00010000,
        /// <summary>alias is a predefined id</summary>
        SND_ALIAS_ID = 0x00110000,
        /// <summary>name is file name</summary>
        SND_FILENAME = 0x00020000,
        /// <summary>name is resource name or atom</summary>
        SND_RESOURCE = 0x00040004
    }
}

然后你的代码来调用它:
Win32.PlaySound("SystemAsterisk", UIntPtr.Zero, (uint)(Win32.SoundFlags.SND_ALIAS | Win32.SoundFlags.SND_NODEFAULT));

关于c# - 如何在C#中播放SystemSound并等待其完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55270685/

相关文章:

c# - dotnet dll反编译并修改代码

ruby - 我将如何以编程方式与 VST(i) 插件交互以合成音频?

javascript - html5音频所需的一些代码帮助

ios - AudioServicesPlaySystemSound 的系统声音是什么?

iphone - 我可以在iPhone上访问短信声音吗?

c# - 需要覆盖导航方法

c# - MS BOT 更改根对话框

c# - 使用 TPL 或异步生成大文本文件的最佳方式

c# - 如何使用 C# 更改我的声卡设置

ios - 如何在 iPhone/iPad 上播放系统声音?