尧图精选

Electron.NET PowerMonitor 系统电源事件监听指南:从睡眠唤醒到电池状态的全方位 C 监控方案

🕒 发布时间:2026/9/28 6:58:01 📁 来源:尧图网络
桌面应用跨平台【免费下载链接】Electron.NET:electron: Build cross platform desktop apps with ASP.NET Core (Razor Pages, MVC, Blazor).项目地址https://gitcode.com/gh_mirrors/el/Electron.NET点击查看免费下载Electron.NET 的Electron.PowerMonitorAPI 为 ASP.NET Core 应用Razor Pages、MVC、Blazor提供了监听系统电源事件的能力覆盖睡眠、唤醒、锁屏、解锁、AC/电池切换与系统关机等关键节点。本文以 PowerMonitor 官方文档 为骨架结合仓库中的 C# 源码、Electron 主进程 TypeScript 桥接层与实际示例完整讲解每个事件的触发时机、平台支持范围、事件注册原理并给出可直接落地的状态保存、安全防护与省电策略示例帮助你在桌面应用中实现健壮的电源感知行为。PowerMonitor 是什么Electron.PowerMonitor是 Electron.NET 提供的系统电源状态监控入口。通过它可以感知三类系统级变化电源来源变化系统切换到 AC 电源或电池供电系统会话变化系统即将休眠、正在恢复、即将重启或关机屏幕会话变化系统即将锁定或解锁屏幕。这些事件全部通过Electron.PowerMonitor上的 C# 事件event Action暴露订阅方式与普通 .NET 事件完全一致。从源码看PowerMonitor.cs 继承自ApiBase并以双重检查锁实现的线程安全单例模式对外提供实例通过 Electron.cs 中的静态属性Electron.PowerMonitor访问public static PowerMonitor PowerMonitor { get { return PowerMonitor.Instance; } }也就是说你在任何位置访问Electron.PowerMonitor拿到的都是同一个实例事件订阅与派发在整个应用生命周期内保持一致。七类电源事件详解事件总览事件触发时机平台支持OnAC系统切换到交流AC电源macOS、WindowsOnBattery系统切换到电池供电macOS、WindowsOnLockScreen系统即将锁定屏幕macOS、WindowsOnUnLockScreen系统即将解锁屏幕macOS、WindowsOnSuspend系统正在挂起进入睡眠所有平台OnResume系统正在恢复唤醒所有平台OnShutdown系统即将重启或关机Linux、macOS平台支持范围在 PowerMonitor.cs 中通过[SupportedOSPlatform]特性逐一声明例如[SupportedOSPlatform(macOS)] [SupportedOSPlatform(Windows)] public event Action OnLockScreen { add AddEvent(value); remove RemoveEvent(value); }注意OnAC、OnBattery与锁屏/解锁事件一样仅适用于 macOS 与 WindowsOnSuspend与OnResume无平台限制而OnShutdown仅适用于 Linux 与 macOS。在实际开发中应结合OperatingSystem.IsMacOS()/OperatingSystem.IsWindows()/OperatingSystem.IsLinux()等运行时判断进行条件订阅这一点与仓库示例项目 HomeController.cs 的做法一致——该控制器在HybridSupport.IsElectronActive为真且系统为 macOS/Windows 时才注册电源事件。OnShutdown 的特殊语义在所有事件中OnShutdown的语义最特殊。根据 PowerMonitor.cs 中的注释说明它对应 Electron 官方 powerMonitor 的shutdown事件当事件处理器调用e.preventDefault()时Electron 会尝试延迟系统关机以便应用能干净退出一旦调用应用应尽快退出例如调用app.quit()。这为关机前保存关键数据提供了时机窗口——尽管 C# 侧当前以无参Action形式暴露该事件你仍可在处理器中执行保存与清理逻辑。事件是如何从 Electron 传到 C# 的要理解 PowerMonitor 事件有必要了解它跨越进程的传递链路。Electron.NET 应用分为两个进程运行 ASP.NET Core 的 .NET 进程与承载 Electron 主进程的 Node.js 进程二者通过 Socket.IO 桥接通信桥接连接器见 BridgeConnector.csSocket.IO 实现见 SocketIOConnection.cs。整个链路可以概括为三个环节C# 侧注册当你执行Electron.PowerMonitor.OnSuspend handler;时ApiBase.AddEvent 会构造事件名PowerMonitor 的SocketEventNameType为DashedLower即powerMonitor-suspend这样的短横线小写格式在 Socket 上监听该事件并通过BridgeConnector.Socket.Emit($register-{eventName})向主进程发送register-powerMonitor-suspend注册请求。主进程桥接powerMonitor.ts 中的导出函数监听上述register-powerMonitor-*消息将 C# 侧订阅一一映射到 Electron 原生powerMonitor对象。例如收到register-powerMonitor-suspend后执行powerMonitor.on(suspend, () electronSocket.emit(powerMonitor-suspend))其余六个事件同理C# 事件注册消息Electron 原生事件回调消息OnLockScreenregister-powerMonitor-lock-screenlock-screenpowerMonitor-lock-screenOnUnLockScreenregister-powerMonitor-unlock-screenunlock-screenpowerMonitor-unlock-screenOnSuspendregister-powerMonitor-suspendsuspendpowerMonitor-suspendOnResumeregister-powerMonitor-resumeresumepowerMonitor-resumeOnACregister-powerMonitor-acon-acpowerMonitor-acOnBatteryregister-powerMonitor-batteryon-batterypowerMonitor-batteryOnShutdownregister-powerMonitor-shutdownshutdownpowerMonitor-shutdown事件回传与派发系统事件发生后主进程通过 Socket 将powerMonitor-*消息推回 .NET 进程ApiBase的事件容器EventContainer收到消息后同步调用你在 C# 侧注册的委托。理解这条链路的意义在于事件只有在 C# 侧被订阅后才会在主进程真正注册因此你应该在应用启动早期完成订阅避免因订阅过晚而错过关键电源事件。使用示例以下示例均来自 PowerMonitor.md 原文结合上述机制可直接运行于 Electron.NET 应用中。基础电源事件监控监控系统睡眠与唤醒在睡眠前保存应用状态、唤醒后恢复// Monitor system sleep/wake Electron.PowerMonitor.OnSuspend () { Console.WriteLine(System going to sleep); // Save application state SaveApplicationState(); }; Electron.PowerMonitor.OnResume () { Console.WriteLine(System waking up); // Restore application state RestoreApplicationState(); };屏幕锁定/解锁监控屏幕锁定时暂停实时操作、解锁后恢复适用于需要保护敏感界面的场景// Handle screen lock events Electron.PowerMonitor.OnLockScreen () { Console.WriteLine(Screen locking); // Pause real-time operations PauseRealTimeOperations(); }; Electron.PowerMonitor.OnUnLockScreen () { Console.WriteLine(Screen unlocking); // Resume real-time operations ResumeRealTimeOperations(); };平台提示OnLockScreen与OnUnLockScreen仅支持 macOS 与 Windows建议在订阅前用OperatingSystem.IsMacOS() || OperatingSystem.IsWindows()判断避免在 Linux 上无效注册仓库示例 HomeController.cs 即采用此写法。电源来源切换根据 AC/电池状态动态调整功耗策略// Monitor power source changes Electron.PowerMonitor.OnAC () { Console.WriteLine(Switched to AC power); // Adjust power-intensive operations EnablePowerIntensiveFeatures(); }; Electron.PowerMonitor.OnBattery () { Console.WriteLine(Switched to battery power); // Reduce power consumption EnablePowerSavingMode(); };系统关机处理在系统关机前保存关键数据并优雅退出// Handle system shutdown Electron.PowerMonitor.OnShutdown () { Console.WriteLine(System shutting down); // Save critical data and exit gracefully SaveAndExit(); };平台提示OnShutdown仅支持 Linux 与 macOS在 Windows 上需要关机监听时可结合 Electron.App 的应用生命周期事件如窗口关闭/退出事件实现等效逻辑。应用状态管理将电源事件整合进统一的初始化方法通过布尔标志跟踪挂起状态实现一套完整的睡眠-唤醒-锁屏响应流程private bool isSuspended false; public void InitializePowerMonitoring() { // Track suspension state Electron.PowerMonitor.OnSuspend () { isSuspended true; OnSystemSleep(); }; Electron.PowerMonitor.OnResume () { isSuspended false; OnSystemWake(); }; // Handle screen lock for security Electron.PowerMonitor.OnLockScreen () { OnScreenLocked(); }; } private void OnSystemSleep() { // Pause network operations PauseNetworkOperations(); // Save unsaved work AutoSaveDocuments(); // Reduce resource usage MinimizeResourceUsage(); } private void OnSystemWake() { // Resume network operations ResumeNetworkOperations(); // Check for updates CheckForUpdates(); // Restore full functionality RestoreFullFunctionality(); } private void OnScreenLocked() { // Hide sensitive information HideSensitiveData(); // Pause real-time features PauseRealTimeFeatures(); }电池状态监控笔记本场景下的性能模式切换// Monitor battery status changes Electron.PowerMonitor.OnAC () { Console.WriteLine(Plugged in - full performance mode); EnableFullPerformanceMode(); }; Electron.PowerMonitor.OnBattery () { Console.WriteLine(On battery - power saving mode); EnablePowerSavingMode(); };实战建议订阅时机与平台守卫结合仓库代码以下几点值得在实际项目中落实尽早订阅建议在应用启动阶段如 ASP.NET Core 的Startup/Program初始化、或应用首个页面加载时完成所有电源事件注册。C# 侧未订阅的事件不会在主进程注册过早错过可能导致状态丢失。用HybridSupport.IsElectronActive守护仓库示例 HomeController.cs 先判断HybridSupport.IsElectronActive再访问Electron.PowerMonitor保证应用在纯 Web 模式下运行时不会触发无效调用。按平台条件订阅由于OnAC/OnBattery/OnLockScreen/OnUnLockScreen仅支持 macOS 与 WindowsOnShutdown仅支持 Linux 与 macOS建议用OperatingSystem.IsMacOS()、OperatingSystem.IsWindows()、OperatingSystem.IsLinux()分流注册避免无意义订阅并保证跨平台可移植性。处理器保持轻量电源事件尤其OnSuspend要求处理器尽快返回避免阻塞系统挂起流程。重活如网络操作、大量持久化应放到后台任务队列执行。与相关 API 的配合Electron.App提供应用生命周期事件如BeforeQuit、WindowAllClosed可与OnShutdown配合在系统关机与用户退出两种场景下都保证数据安全。Electron.Notification可在电源事件发生后向用户发送桌面通知例如电量切换提示、唤醒后的更新提示等让用户对电源状态变化有明确感知。小结Electron.PowerMonitor用七个 C# 事件把 Electron 原生 powerMonitor 能力完整映射到 .NET 世界OnAC/OnBattery感知电源来源OnSuspend/OnResume感知睡眠与唤醒OnLockScreen/OnUnLockScreen感知屏幕会话OnShutdown把握系统关机前最后的保存窗口。结合本文梳理的跨进程桥接原理C# 订阅 →register-注册消息 → powerMonitor.ts 桥接 → 事件回传与平台支持矩阵你可以在任意 Electron.NET 应用中可靠地实现自动保存、功耗优化、安全锁屏与优雅退出等电源感知能力。赞分享桌面应用跨平台【免费下载链接】Electron.NET:electron: Build cross platform desktop apps with ASP.NET Core (Razor Pages, MVC, Blazor).项目地址https://gitcode.com/gh_mirrors/el/Electron.NET点击查看免费下载相关推荐Solaar与系统电源事件休眠/唤醒时的设备状态处理Solaar与系统电源事件休眠/唤醒时的设备状态处理 问题场景休眠唤醒后的设备异常 你是否遇到过这样的情况Linux系统从休眠状态唤醒后Logitech开发工具Electron powerMonitor 深度解析在桌面应用中监听系统电源、休眠与热状态Electron powerMonitor 深度解析在桌面应用中监听系统电源、休眠与热状态 Electron 的 powerMonitor 模块让主进程能够感桌面应用跨平台前端UDA与BERT强强联合如何在GPU和TPU上实现最佳性能UDA与BERT强强联合如何在GPU和TPU上实现最佳性能 Unsupervised Data Augmentation UDA 技术与BERT模型的结合为自上一篇lax.js状态管理集成Redux/Vuex中的动画控制下一篇解决React Native轮播图加载慢问题用FastImage实现图片缓存创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →