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

问题描述

带有问题代码的空白项目存储库

我有以下代码用于在本文之后使用以下代码查询所有支持的音频编解码器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(对于CodecCategoryor EncoderDecoder。如果我指定一个子类型,那么它不会崩溃,例如:

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

奇怪的是,即使我有一个 try/catch 与 generic Exception,应用程序只是通过那个崩溃并显示这个:

在此处输入图像描述

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

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

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

标签: c#.netaudiouwpwindows-10-universal

解决方案


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

您可以选择Debug选项,并将Debugger 类型Managed Only更改为Mixed。它不会修复您的异常,但您可以使用调试器对其进行跟踪。您可以参考此回复以获取更多信息。


推荐阅读