由于WPF应用程序出现卡死的情况,特记录一下问题的跟踪情况
1、多次进行NAudio事件注册,没有启用注销再注册的方式,造成应用程序CPU过高
private AudioNotificationClient audioNotification = new AudioNotificationClient();
audioNotification.DeviceStateChanged += AudioNotification_DeviceStateChanged;
private MMDeviceEnumerator _mmDeviceEnumerator = new MMDeviceEnumerator();
_mmDeviceEnumerator.RegisterEndpointNotificationCallback(audioNotification);
缺少注销
_mmDeviceEnumerator.UnregisterEndpointNotificationCallback(audioNotification);
2、事件注册同时麦克风设备状态发生改变DeviceStateChanged,造成线程死锁
可以使用异步队列,把事件的注册,注销与DeviceStateChanged执行逻辑都放进异步队列,保证不会出现同时执行的情况。
异步队列的实现:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |