热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#–UWP:BrightnessOverrideStartOverride逻辑

有人知道StartOverride方法逻辑吗?来自文档:The request to start overriding does not mean that the screen brightnes

有人知道StartOverride方法逻辑吗?来自文档:

The request to start overriding does not mean that the screen

brightness level always changes to match the specified override

brightness level. It’s still up to the system to decide whether or not

to honor this override request.

我编写了简单的方法来调试亮度变化:

protected override void ApplyBrightness(double brightness)
{
var brightnessOverride = BrightnessOverride.GetForCurrentView();
Debug.WriteLine($"Try to change brightness from {brightnessOverride.BrightnessLevel} to {brightness}");
void overrideActiveChangedHandler(BrightnessOverride sender, object e)
{
sender.IsOverrideActiveChanged -= overrideActiveChangedHandler;
Debug.WriteLine($"BrightnessOverride IsOverrideActive changed to {sender.IsOverrideActive}");
}
void brightnessLevelChangedHandler(BrightnessOverride sender, object e)
{
sender.BrightnessLevelChanged -= brightnessLevelChangedHandler;
Debug.WriteLine($"BrightnessOverride BrightnessLevel changed to {sender.BrightnessLevel}");
}
brightnessOverride.IsOverrideActiveChanged += overrideActiveChangedHandler;
brightnessOverride.BrightnessLevelChanged += brightnessLevelChangedHandler;
brightnessOverride.SetBrightnessLevel(brightness, DisplayBrightnessOverrideOptions.None);
brightnessOverride.StartOverride();
}

得到以下结果:

Try to change brightness from 0.83 to 0.23
BrightnessOverride IsOverrideActive changed to True
BrightnessOverride BrightnessLevel changed to 0.23
Try to change brightness from 0.23 to 0.53
BrightnessOverride IsOverrideActive changed to True
BrightnessOverride BrightnessLevel changed to 0.53
Try to change brightness from 0.53 to 0.14
Try to change brightness from 0.53 to 0.25
Try to change brightness from 0.53 to 0.7
BrightnessOverride IsOverrideActive changed to True
BrightnessOverride BrightnessLevel changed to 0.7

从该测试我可以看出,对于第一次亮度变化,可以降低亮度(0.83-> 0.23),但是在亮度之后可以仅增加亮度(0.23-> 0.53,0.53-> 0.7).随后尝试降低它是失败的:0.53 – > 0.14,0.53 – > 0.25

有没有人对这种奇怪的行为有解释?也许我错过了什么?是否有100%强大的解决方案来控制应用亮度?

我的系统:Windows 10 Pro,版本1709,操作系统版本16299.125.
应用程序目标和最小版本是Windows 10 Creators Update(10.0; Build 15063)

解决方法:

我通过实验发现,BrightnessOverride.GetForCurrentView()每次调用时都会返回一个新的BrightnessOverride实例.这方面的一个证据是,即使每次调用方法时都向实例添加新的事件处理程序,输出也只出现一次.

这意味着,当您多次调用该方法时,您将创建多个BrightnessOverride实例,每个实例都有自己的值.我认为,因为API通常用于在有人从屏幕上扫描优惠券代码时使屏幕更亮,当更低的亮度覆盖在另一个高亮度覆盖激活时,它会被忽略(以保持尊重高亮度请求) ).

如果要将亮度更改为任何值,则只需确保重新使用从GetForCurrentView调用中检索到的第一个实例,因为通过在该实例上设置新亮度,您将“取消”原始请求.

private BrightnessOverride brightnessOverride = null;
private void InitializeBrightnessOverride()
{
brightnessOverride = BrightnessOverride.GetForCurrentView();
Debug.WriteLine($"Try to change brightness from {brightnessOverride.BrightnessLevel} to {brightness}");
void overrideActiveChangedHandler(BrightnessOverride sender, object e)
{
sender.IsOverrideActiveChanged -= overrideActiveChangedHandler;
Debug.WriteLine($"BrightnessOverride IsOverrideActive changed to {sender.IsOverrideActive}");
}
void brightnessLevelChangedHandler(BrightnessOverride sender, object e)
{
sender.BrightnessLevelChanged -= brightnessLevelChangedHandler;
Debug.WriteLine($"BrightnessOverride BrightnessLevel changed to {sender.BrightnessLevel}");
}
brightnessOverride.IsOverrideActiveChanged += overrideActiveChangedHandler;
brightnessOverride.BrightnessLevelChanged += brightnessLevelChangedHandler;
}
protected override void ApplyBrightness(double brightness)
{
brightnessOverride.SetBrightnessLevel(brightness, DisplayBrightnessOverrideOptions.None);
brightnessOverride.StartOverride();
}

现在你可以打电话:

InitializeBrightnessOverride();
ApplyBrightness(0.7);
ApplyBrightness(0.14);

重新使用该实例就足以使这项工作成功.另外作为提示 – 将屏幕恢复为原始亮度,您可以调用StopOverride.


推荐阅读
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 本文介绍了如何通过扩展 UnityGUI 创建自定义和复合控件,以满足特定的用户界面需求。内容涵盖简单和静态复合控件的实现,并展示了如何创建复杂的 RGB 滑块。 ... [详细]
author-avatar
吴玉占_717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有