首页 > 解决方案 > 指示 VPN 连接状态 WPF

问题描述

我一直想知道如何在 WPF 中显示 VPN(显示 VPN)连接状态。由于我还没有找到这个问题的任何直接答案,我开始自己尝试并让它工作。但是我在想这是最有效的方法还是专家会有其他建议?

这是 MainProcess.cs 中的主要方法:

    public static bool CheckForVPNInterface()
    {
        if (NetworkInterface.GetIsNetworkAvailable())
        {
            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface Interface in interfaces)
            {
                if (Interface.OperationalStatus == OperationalStatus.Up)
                {
                    if ((Interface.NetworkInterfaceType == NetworkInterfaceType.Ppp) && (Interface.NetworkInterfaceType != NetworkInterfaceType.Loopback))
                    {
                        _ = Interface.GetIPv4Statistics();

                        return true;
                    }
                }
            }
        }

        return false;
    }

这是 MainWindow.xaml.cs 中的计时器:

    public async Task CheckForVPNConnectionTimeToTime()
    {
        while (true)
        {
            var delayTask = Task.Delay(3000);
            Application.Current.Dispatcher.Invoke(() => {
                if (MainProcess.CheckForVPNInterface() == true)
                {
                    // Change color to available
                    return VPNStatus.Fill = Brushes.LightGreen;
                }

                //Change color to unavailable
                return VPNStatus.Fill = Brushes.Red;
            });
            await delayTask;
        }
    }

这里是一切都被称为 MainWindow.xaml.cs 的地方:

    public MainWindow()
    {
        InitializeComponent();
        
        // check for VPN connection
        _ = CheckForVPNConnectionTimeToTime(); 

        // check for Internet connection
        NetworkChange.NetworkAvailabilityChanged += OnNetworkAvailabilityChanged;
        var isAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
        OnNetworkAvailabilityChanged(isAvailable);

    }

以下是 MainWindow.xaml 中的实际指标(第一个用于 Internet 连接,不包括在当前范围内,第二个用于 VPN 连接):

    <!--SHAPES-->

    <Ellipse x:Name="NetworkStatus" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="15" VerticalAlignment="Top" Width="15" RenderTransformOrigin="-1.048,0.476" Margin="489,16,0,0"/>
    <Ellipse x:Name="VPNStatus" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="15" VerticalAlignment="Top" Width="15" RenderTransformOrigin="-1.048,0.476" Margin="603,16,0,0"/>

标签: c#wpf

解决方案


推荐阅读