CodecQuery.FindAllAsync 在查询没有子类型的音频编解码器时通过 try/catch 崩溃

问题描述

Blank project repo with problematic code

我有以下代码用于使用 this article

CodecQuery.FindAllAsync 之后查询所有支持的音频编解码器
            try
            {
                var query = new CodecQuery();
                var queryResult = await query.FindAllAsync(CodecKind.Audio,CodecCategory.Encoder,"");

                var subTypes = queryResult
                    .SelectMany(q => q.Subtypes)
                    .ToHashSet();

                // Other codes
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                throw;
            }

如文档所述,

要指定应返回指定种类和类别的所有编解码器,而不管支持哪些媒体子类型,请为此参数指定空字符串 ("") 或 null。

对于空字符串 "",它适用于 CodecKind.Video 但不适用于 Audio(对于 CodecCategoryEncoderDecoder)。如果我指定一个子类型,那么它不会崩溃,例如:

var queryResult = await query.FindAllAsync(CodecKind.Audio,CodecSubtypes.AudioFormatMP3);

奇怪的是,即使我使用泛型 Exception 进行了 try/catch,应用程序还是会崩溃并显示内容

enter image description here

我尝试重新启动 Windows,卸载 UWP 应用并进行干净构建。怎么了?如何查询所有可用的音频编解码器?

更新:更改调试设置后,我可以跟踪错误消息:

******.exe 中 0x00007FFDCE5FD759 (KernelBase.dll) 处的未处理异常:0xC0000002:请求的操作未实现。

解决方法

经过我的测试,这个文档的内容是正确的。当我为第三个参数设置“”以查找所有音频编解码器时,代码运行良好。所以这个文件没有错误。

您可以选择调试选项,并将调试器类型仅托管更改为混合。它不会修复您的异常,但您可以使用调试器跟踪它。您可以参考this reply以获取更多信息。