用于处理UWP中MediaSource的URI属性的自适应代码

时间:2017-12-19 09:43:33

标签: c# xaml uwp

我正在为UWP应用程序编写一些库。我的图书馆设置了:

  • 目标版本:16299
  • 最低版本:14393

我在那里MediaPlayerElement,想查看视频网址。在15063年引入了Uri财产。

  

获取与MediaSource关联的URI   设备系列:Windows 10 Creators更新(引入v10.0.15063.0)   API合同:Windows.Foundation.UniversalApiContract(介绍v4)

我以为我可以使用这样的东西:

if (ApiInformation.IsPropertyPresent(typeof(MediaSource).FullName, "Uri"))
{
    return (element.MediaPlayer.Source as MediaPlaybackItem)?.Source?.Uri.AbsoluteUri;
}

它确实有效但我发现当我将我的库包含到具有以下内容的应用程序时会出现问题:

  • 目标和最低版本14393。
  

抛出异常:..............中的'System.MissingMethodException'   找不到方法:'System.Uri Windows.Media.Core.MediaSource.get_Uri()'。

在这种情况下,

try/catch无效。

还有什么我可以做的吗?

2 个答案:

答案 0 :(得分:1)

将访问URI属性的代码放入您在if语句中调用的单独方法中。这应该避免丢失方法异常。这是因为.NET以每个方法动态解析方法调用的方式。在14393,它永远不会得到那种新方法,所以你不会得到例外。

答案 1 :(得分:0)

你无能为力。唯一的解决方案是将您应用的最低版本设置为15063,并要求目标设备将Windows 10版本更新为最低版本或更高版本。我自己在现有应用中使用CREATE TABLE SampleData (Grade INT, TimeInterval INT, SubjectName VARCHAR(100)) INSERT SampleData ( Grade, TimeInterval, SubjectName ) VALUES (1, 0, 'History '), (1, 1, 'Chemistry '), (1, 3, 'Biology '), (2, 0, 'Maths '), (2, 2, 'Biology '), (2, 3, 'History '), (3, 0, 'Biology '), (3, 1, 'History '), (3, 2, 'Chemistry '), (3, 3, 'Maths '); DECLARE @cols nvarchar(max) SELECT @cols = STUFF( (SELECT DISTINCT CONCAT(',[', t.TimeInterval, ']') FROM SampleData t FOR XML PATH ('')) ,1,1,'') DECLARE @headers nvarchar(max) SELECT @headers = STUFF( (SELECT DISTINCT CONCAT(', [' , t.TimeInterval , '] AS [TimeInterval' , t.TimeInterval, ']') FROM SampleData t FOR XML PATH ('')) ,1,1,'') DECLARE @query nvarchar(max) = N'Select [Grade], ' + @headers + ' FROM ( SELECT Grade, TimeInterval, SubjectName FROM SampleData ) src PIVOT ( MAX(SubjectName) FOR TimeInterval IN ('+ @cols+ ') ) pvt ' PRINT @query EXEC (@query) DROP TABLE SampleData ,并被迫将最低版本设置为15063。

此外,您无法使用MediaPlayerElement来捕获这些类型的错误。