【问题标题】:Why is this WinRT function required to be extracted while others are not?为什么需要提取这个 WinRT 函数而其他函数不需要?
【发布时间】:2021-01-28 07:40:03
【问题描述】:

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/handle-app-prelaunch#detect-and-handle-prelaunch 上写着:

注意上面的TryEnablePrelaunch() 函数。对CoreApplication.EnablePrelaunch() 的调用被分解到这个函数中的原因是,当一个方法被调用时,JIT(即时编译)将尝试编译整个方法。如果您的应用在不支持 CoreApplication.EnablePrelaunch() 的 Windows 10 版本上运行,则 JIT 将失败。通过将调用分解为仅在应用确定平台支持CoreApplication.EnablePrelaunch() 时调用的方法,我们避免了该问题。

为什么这里有必要大惊小怪,而 all other occasions 似乎没有必要?

【问题讨论】:

    标签: uwp windows-runtime


    【解决方案1】:

    实际上,确保 API 在设备上是否可用始终很重要。第一个文档中的注释强调了不应使用当前操作系统版本中不可用的 API 的原因。第二个文档对此进行了总结,并展示了检查 API 可用性的常用方法。

    他们都在说明 API 可用性的重要性。

    【讨论】:

    • 但是只有CoreApplication.EnablePrelaunch()才有必要将此类调用提取到单独的函数中吗?文档中的所有其他示例仅调用 WinRT 函数(在检查其可用性后),它们从不将它们提取到单独的函数中。
    • 它只是解释了这样做的方法以及这样做的原因。您也可以对其他功能执行相同的操作。关键是对可能不支持所有版本的 API 进行 API 可用性检查很重要。
    • 我还是不明白。如果有必要将 所有 WinRT 函数封装到单独的函数中,否则 JIT 编译器不会编译包含调用的方法(为什么这里还涉及 JIT 编译?),这将变得相当麻烦时间,否则应用程序会在较旧的 Windows 版本上崩溃。然后,无论如何 API 检查都是多余的。 ...我的谬误在哪里?
    • 首先,并非所有 API 都需要进行 API 可用性检查。其次,将方法放入单独函数的方式是可选的。您可以直接调用此 API。因为关键步骤——API 可用性检查是首先完成的。您需要做的就是检查结果以查看设备是否能够运行目标 API。
    • 感谢您抽出宝贵时间。好吧,这就是我到目前为止所相信的。 ...那么为什么那么有必要对提取CoreApplication.EnablePrelaunch() 大惊小怪吗? CoreApplication.EnablePrelaunch() 有什么特别之处,需要将其提取到单独的方法中(否则程序会崩溃,不管之前的检查如何,因为连检查都不会运行)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2017-08-18
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多