C# 如何在C语言中检测蜂窝连接#

C# 如何在C语言中检测蜂窝连接#,c#,wpf,network-programming,C#,Wpf,Network Programming,我正在开发一个“常规”的C#WPF应用程序(没有UWP应用程序),我需要知道我是否正在使用手机连接。在设备内部使用SIM卡时,或使用移动电话热点时,都可以使用蜂窝连接 我怎样才能做到这一点 背景: 由于应用程序可能会下载大量数据,我希望用户可以选择是否避免通过蜂窝连接下载) 其他问题: 我已经看到了,他们正在关注UWP功能。另外,它只关注连接本身,而不是它是否是蜂窝连接。您可以通过网络适配器识别您的计算机网络适配器 此外,您可以利用该属性筛选当前连接的适配器并标识连接类型。检查下面的示例 不幸的

我正在开发一个“常规”的C#WPF应用程序(没有UWP应用程序),我需要知道我是否正在使用手机连接。在设备内部使用SIM卡时,或使用移动电话热点时,都可以使用蜂窝连接

我怎样才能做到这一点

背景: 由于应用程序可能会下载大量数据,我希望用户可以选择是否避免通过蜂窝连接下载)

其他问题:
我已经看到了,他们正在关注UWP功能。另外,它只关注连接本身,而不是它是否是蜂窝连接。

您可以通过网络适配器识别您的计算机网络适配器

此外,您可以利用该属性筛选当前连接的适配器并标识连接类型。检查下面的示例

不幸的是,我的机器上没有手机调制解调器来检查它是否返回所需的结果,但请尝试一下,让我们知道它是否工作

 NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
 foreach (NetworkInterface adapter in interfaces)
    {
        //Check if it's connected
        if (adapter.OperationalStatus == OperationalStatus.Up
            //The network interface uses a mobile broadband interface for WiMax devices.
            && (adapter.NetworkInterfaceType == NetworkInterfaceType.Wman
                //The network interface uses a mobile broadband interface for GSM-based devices.
                || adapter.NetworkInterfaceType == NetworkInterfaceType.Wwanpp
                //The network interface uses a mobile broadband interface for CDMA-based devices.
                || adapter.NetworkInterfaceType == NetworkInterfaceType.Wwanpp2))
        {
            //adapter probably is cellular
        }                
    }

我尝试了UWP库,并能够使用UWP引用解决它

我添加了以下参考:

C:\Program Files (x86)\Windows Kits\10\References\10.0.17763.0\Windows.Foundation.UniversalApiContract\7.0.0.0\Windows.Foundation.UniversalApiContract.winmd
并使用此代码检查计量连接:

private void CheckIsMetered()
{
    var profile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
    IsInternetAvailable = profile != null && profile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess;
    if (IsInternetAvailable)
        IsMetered = profile.GetConnectionCost().NetworkCostType != Windows.Networking.Connectivity.NetworkCostType.Unrestricted;
}
我使用NetworkStatusChanged事件重新检查IsMetered

CheckIsMetered();
NetworkInformation.NetworkStatusChanged += (s) => CheckIsMetered(); 

这在我的WPF应用程序中有效

“常规C#应用程序”是什么意思?控制台应用程序?Winforms?WPF?可能有用吗?这是一个WPF应用程序(我会更新帖子)@BrootsWaymb绝对有用,谢谢!然而,它并没有检测到来自手机的热点连接。另请参阅我对kyriakosio回答的评论。谢谢你的回答,这绝对有帮助。但是,当我将手机用作热点时,它不会检测到(例如,Onedrive会立即弹出一个弹出窗口,说由于手机连接,同步已暂停)。