在c#中监听事件的最佳方式

时间:2014-03-20 12:59:08

标签: c# event-handling

我需要创建一个小的监听器实用程序"监听"用于音频活动,并在检测到声音时执行操作。

目前我正在使用while循环:

        MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
        MMDevice device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);

        float level = 0;
        while (level == 0)
        {
            // Get current audio level
            level = device.AudioMeterInformation.MasterPeakValue;
        }
        Console.WriteLine("Audio Detected");
        Console.ReadKey();

这可以正常工作,但鉴于我希望这个实用程序能够始终在"在后台,我想确保我以最有效的方式这样做。

这是不好的做法吗?我应该创建一个EventHandler,如果是,我该怎么做?

要提供有关要求的更多详细信息,当实用程序检测到音频时,我希望它调整窗口大小。 (它是浏览器中的视频会议窗口,应保持最小化。当第三方加入呼叫并开始说话时,我希望窗口最大化。当用户完成呼叫时,他们只会再次最小化窗口,我希望听众应用程序在下次用户加入呼叫时继续收听。)

1 个答案:

答案 0 :(得分:0)

使用OnPropertyValueChanged事件。在此方法中使用与while循环中相同的代码。

顺便说一下:你是否意识到当用户第一次达到0级时会打印出“Audio Detected”?这是你想要的吗?