c# - 在调用它之前检查是否可以从 api 调用方法

标签 c# windows-runtime

我有以下代码:

var view = ApplicationView.GetForCurrentView();
var runtimeMethods = view.GetType().GetRuntimeMethods();
if (!view.IsFullScreen)
{
    var tryEnterFullScreenMode = runtimeMethods.FirstOrDefault(
        x => x.Name == "TryEnterFullScreenMode");
    tryEnterFullScreenMode?.Invoke(view, null);
}

这样做会导致我的应用程序变为全屏,但是如果我在 Windows 8.1 电脑上,我将无法调用这些方法。在调用方法之前,我如何首先检查此功能是否可用。我会使用#if...#endif 吗? 基本上,我只想在应用程序在可以访问它的机器(Windows 10 操作系统)上运行时使用此代码。

最佳答案

桌面开发不会受到 Web 开发所经历的碎片化的影响,因此没有功能支持查询,而是库支持/操作系统版本。至少我不知道。

通常做的是

1) 动态加载程序集,基于您运行的操作系统系列版本。为此,您需要一些通用的接口(interface)包装器,它在内部、在引擎盖下包含所有“真实”的 API 调用。

2) 每个不同操作系统系列都有不同的版本。您需要支持 2 个代码库。不过,实际上不同的代码可能会移动到单独的程序集,因此您只有一小部分程序集,这些程序集在不同的操作系统系列之间是不同的。适合打补丁,因为只需将相对少量的数据移动到客户端。这里仍然需要通用接口(interface)。

所以你必须找到答案的基本问题是:不是如何处理多样性,而是当你发现你需要做一些与预期不同的事情时你应该做什么。从中你可以理解你将要处理它的最可靠的方式。

关于c# - 在调用它之前检查是否可以从 api 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175696/

相关文章:

c# - 在基础设施数据网格中设置列标题

c# - 模拟接口(interface)转换回原始类

c# - 使用 Open XML SDK 2.0 检索每行和每列中的所有单元格值

c# - c#中的通用接口(interface)类型推断怪异

c# - 无法编译 Roslyn 项目

windows-runtime - 如何使 C# Windows 运行时组件类型相等?

windows-phone-7 - Windows 8 中是否有 Windows Phone 'User Idle Detection' 的类似版本?

以StorageFile为参数的C#测试方法

c++ - Windows::Storage::ApplicationData::Current 在 C++ 中找不到

notifications - 如何注册 Win8 定期磁贴通知?