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

时间:2015-07-09 16:59:11

标签: c#

我有一个附加到事件的简单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;
            }
        }
    }
}

3 个答案:

答案 0 :(得分:14)

您可以拨打<!DOCTYPE html> <html> <head> <style type="text/css"> #borked { background: yellow; position: relative; height: 100%; } #borked~* { height: 100px; } #borked::before { content: ""; position: absolute; top: 0; width: 100%; height: 100%; background-color: rgba(255, 0, 0, 0.3); } </style> </head> <body> <table> <tr><td id="borked">abc</td><td>def</td></tr> </table> </body> <script type="text/javascript"> "use strict"; var borked = document.getElementById("borked"); var c = document.createElement("td"); c.textContent = "(1st cell seems to be " + borked.clientHeight + "px tall)"; borked.parentElement.appendChild(c); </script> </html> (如果您想终止按键),或只是Console.ReadLine()

答案 1 :(得分:1)

在使用async主方法的情况下,也可以使用await Task.Delay(-1);

答案 2 :(得分:-2)

您可以像这样创建一个while循环:

while(!eventFired) {}

然后有一个字段:

private bool eventFired = false;

然后最终在事件被触发时make:

eventFired = true;

(如果你希望它在事件被触发一次之后退出,那就是。如果它应该永远运行,请参阅sleep和readkey的其他答案)

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