You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET Standard中,Windows Forms的PowerLineStatus等效项是什么?

.NET Framework迁移到.NET Standard时PowerLineStatus的替代方案

由于.NET Standard是跨平台规范,本身没有直接对应Windows Forms中PowerLineStatus的跨平台API(该API是Windows平台专属),可根据你的项目运行场景选择以下方案:

1. 仅针对Windows平台的等效实现

如果迁移后的项目仍仅运行在Windows上(比如目标为.NET Core/.NET 5+的Windows应用),可以通过P/Invoke调用Windows原生APIGetSystemPowerStatus来获取电源状态,完全等效于原PowerLineStatus的功能:

using System.Runtime.InteropServices;

// 对应Windows系统电源状态结构体
public struct SystemPowerStatus
{
    public byte ACLineStatus;
    public byte BatteryFlag;
    public byte BatteryLifePercent;
    public byte Reserved1;
    public uint BatteryLifeTime;
    public uint BatteryFullLifeTime;
}

public static class PowerStatusHelper
{
    [DllImport("kernel32.dll")]
    private static extern bool GetSystemPowerStatus(out SystemPowerStatus lpSystemPowerStatus);

    // 获取当前电源连接状态,对应原PowerLineStatus
    public static byte GetACLineStatus()
    {
        GetSystemPowerStatus(out var status);
        // 取值说明:0=断电(对应PowerLineStatus.Offline),1=通电(对应PowerLineStatus.Online),255=未知(对应PowerLineStatus.Unknown)
        return status.ACLineStatus;
    }
}

2. 跨平台场景的处理

如果需要支持多平台(Windows/Linux/macOS),则没有通用的等效API,需针对不同平台分别实现:

  • Linux:读取/sys/class/power_supply/AC/online文件内容(1表示通电,0表示断电)
  • macOS:通过Objective-C桥接调用IOPMPowerSource相关API,或执行pmset -g batt命令解析输出结果

内容的提问来源于stack exchange,提问作者bob123123123123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:22:36