なんとなく Outlook 2016 を使っていたら、
画像のように、従量制課金接続であることを検出して、自動でオフラインとなっていました。
他のアプリでも使えると、何かと便利そうなので、実装してみます。
従量制課金接続などといったネットワークの状態を知るには、 NetworkInformation
クラスを
使用します。
しかしながら、 NetworkInformation
クラスは Windows.Networking.Connectivity
にあり、
この名前空間は UWP の API となっているため、 WPF 標準では使用することができません。
ということで、 Desktop アプリから UWP の API を呼べるようにします。
幾つか方法があるようですが、 NuGet Gallery | UWP for Desktop 10.0.10240.1 を追加することで
使えるようになるようです。
(Build 10240 のままだけど、大丈夫なのだろうか)
他の方法としては、一旦プロジェクトをアンロードし、 *.csproj
に
<TargetPlatformVersion>10.0</TargetPlatformVersion>
を追加し、再読み込みして必要なアセンブリを追加していくという方法もあります。
UWP の API を呼べるようにしたら、 NetworkInformation
が使えるようになるので、
コードを書いていきます。
こんな感じ。
var networkInformation = NetworkInformation.GetInternetConnectionProfile(); var connectionCost = networkInformation.GetConnectionCost(); if (connectionCost != NetworkCostType.Unknown && connectionCost != NetworkCostType.Unrestricted) { // 従量制課金接続 }
なお、ネットワークが切り替わったら呼び出されるイベントも同様に存在しているので、
それを使えば、 Outlook のように、従量制課金接続になったらオフライン...といったことも可能になります。