[英]How to play SystemSound in c# and wait for it to complete?
You can play a system sound as follows: 您可以按以下方式播放系统声音:
SystemSounds.Asterisk.Play();
But it plays asynchronously. 但是它异步播放。 This is usually ok, but I want to wait for it to complete, and then run some other code afterwards.
通常没关系,但是我要等待它完成,然后再运行其他代码。 How to do this?
这个怎么做?
This is not the only solution, but it's what I came up with. 这不是唯一的解决方案,而是我想到的。
You can do this using the PlaySound
API ( https://docs.microsoft.com/en-us/previous-versions/dd743680(v%3Dvs.85) ). 您可以使用
PlaySound
API( https://docs.microsoft.com/zh-cn/previous-versions/dd743680 ( v% PlaySound
) )执行此操作。
Use DllImport to bring in the reference: 使用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
}
}
Then your code to call it: 然后你的代码来调用它:
Win32.PlaySound("SystemAsterisk", UIntPtr.Zero, (uint)(Win32.SoundFlags.SND_ALIAS | Win32.SoundFlags.SND_NODEFAULT));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.