我正在尝试做一些可能非常简单的事情,但是我似乎不能让它工作。我正在写一个小应用程序,显示一些信息,包括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; }
}
}
`
1条答案
按热度按时间uajslkp61#
查看ManagementEventWatcher类。
https://learn.microsoft.com/en-us/dotnet/api/system.management.managementeventwatcher?view=dotnet-plat-ext-7.0
您可以使用它来查找IP地址更改,然后将这些更改发送到显示它的窗口。