C#控制台程序永远等待事件

C#控制台程序永远等待事件,c#,C#,我有一个简单的C#控制台应用程序,它连接到一个事件。我需要程序持续运行,以便它能够响应事件。保持它运行的正确方法是什么 这是我的申请表: using System; using NAudio.CoreAudioApi; namespace MaxVolume { class Program { private const float DesiredLevel = -15; private static MMDevice _device;

我有一个简单的C#控制台应用程序,它连接到一个事件。我需要程序持续运行,以便它能够响应事件。保持它运行的正确方法是什么

这是我的申请表:

using System;
using NAudio.CoreAudioApi;

namespace MaxVolume
{
    class Program
    {
        private const float DesiredLevel = -15;
        private static MMDevice _device;

        static void Main(string[] args)
        {
            MMDeviceEnumerator mmde = new MMDeviceEnumerator();
            _device = mmde.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);

            _device.AudioEndpointVolume.MasterVolumeLevel = DesiredLevel;

            _device.AudioEndpointVolume.OnVolumeNotification += SetVolume;
        }

        static void SetVolume(AudioVolumeNotificationData data)
        {
            if (Math.Abs(data.MasterVolume - DesiredLevel) > 0.1)
            {
                _device.AudioEndpointVolume.MasterVolumeLevel = DesiredLevel;
            }
        }
    }
}

您可以调用
Console.ReadLine()
(如果您想在击键时终止),或者只需调用
Thread.Sleep(Timeout.Infinite)
,您可以创建一个while循环,如下所示:

while(!eventFired) {}
然后有一个字段:

private bool eventFired = false;
最后,当触发事件时,生成:

eventFired = true;
(如果希望它在事件触发一次后退出,也就是说,如果它应该永远运行,请使用sleep和readkey查看其他答案)


注意:这会耗尽CPU,不应在任何生产中使用,但在快速且肮脏的测试设置中,这可能是值得的。

对于
异步
主方法,也可以使用
等待任务。延迟(-1)

也许您应该考虑创建一个窗口service@RobinNadeau最终我会的,但现在我需要它是一个控制台应用程序,以便非管理员用户可以使用它进行测试。这不是线程安全的,并且会挂起一个CPU核心。别这么做。编辑它是为了反映我对使用它的想法。丁,我们有赢家了!