XAML 如果网络发生更改,则更新IP地址文本框

mgdq6dx1  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(137)

我正在尝试做一些可能非常简单的事情,但是我似乎不能让它工作。我正在写一个小应用程序,显示一些信息,包括IP地址。一切都很完美,除了当IP地址改变时(网络断开连接,LAN到WiFi等),我无法让它更新文本字段,并显示一条消息说已断开连接,或者使用新的IP地址。我已经尝试了很多方法,但都不起作用。我正在使用的一个解决方法是关闭程序,然后立即启动它。
下面是我正在使用的解决方法代码:
`

using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Management.Automation;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Collections.ObjectModel;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Threading;
using Microsoft.Win32;
using System.Diagnostics;
using System.Xml.Linq;
using System.Net;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Microsoft.TeamFoundation.Common.Internal;

using Microsoft.TeamFoundation.Framework.Common;

namespace JIC_BackgroundInfo
{
    
    public partial class MainWindow : Window
    {
        private UserPreferenceChangedEventHandler UserPreferenceChanged;
        public MainWindow()
        {
            InitializeComponent();
          

            this.WindowStartupLocation = WindowStartupLocation.Manual;
            this.Left = System.Windows.SystemParameters.WorkArea.Width - this.Width;
            this.Top = System.Windows.SystemParameters.WorkArea.Height - this.Height;
            NetworkChange.NetworkAddressChanged += new
            NetworkAddressChangedEventHandler(AddressChangedCallback);

            }

  static void AddressChangedCallback(object sender, EventArgs e)
        {
            Process.Start(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\JIC_BackgroundInfo.exe");
            Thread.Sleep(8500);
            Application.Current.Shutdown();

        }

'我尝试了以下代码,沿着许多其他变体,但它只是崩溃的应用程序:
`

public void AddressChangedCallback(object sender, EventArgs e)
        {
            using (PowerShell powerShell = PowerShell.Create())
            {
                try
                {
                    var ps1 = $@"(Get-NetIPAddress -AddressFamily IPv4 -AddressState Preferred -PrefixOrigin Dhcp).IPv4Address";

                    powerShell.AddScript(ps1);
                    Collection<PSObject> PSOutput = powerShell.Invoke();
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (PSObject pSObject in PSOutput)
                    {
                        stringBuilder.AppendLine(pSObject.ToString());
                    }

                    TxtBoxIPAddress.Text = stringBuilder.ToString();

                }

                catch { TxtBoxIPAddress.Text = "No Address Found!"; return; }
            }

        }

`

uajslkp6

uajslkp61#

查看ManagementEventWatcher类。
https://learn.microsoft.com/en-us/dotnet/api/system.management.managementeventwatcher?view=dotnet-plat-ext-7.0
您可以使用它来查找IP地址更改,然后将这些更改发送到显示它的窗口。

相关问题