
csharp
<Window x:Class="NetworkChange.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="网络状态监控" Height="300" Width="400">
<StackPanel Margin="20">
<TextBlock Text="连接列表:" FontWeight="Bold" Margin="0,0,0,10"/>
<ListBox x:Name="ConnectionListBox" Height="150" Margin="0,0,0,10"/>
<TextBlock x:Name="StatusText" Text="状态: 等待网络变化..." HorizontalAlignment="Center"/>
</StackPanel>
</Window>
csharp
using System;
using System.Collections.ObjectModel;
using System.Net.NetworkInformation;
using System.Windows;
using System.Windows.Threading;
namespace NetworkChange
{
public partial class MainWindow : Window
{
private ObservableCollection<string> connections = new ObservableCollection<string>();
public MainWindow()
{
InitializeComponent();
string originalString = "v_non_047-仪式结束 - 副本 (3).mp4";
string result = originalString.Substring(6);
// result = "WorldWPF"
ConnectionListBox.ItemsSource = connections;
// 添加一些测试数据
connections.Add("192.168.1.100 - 计算机A");
connections.Add("192.168.1.101 - 计算机B");
// 开始监听网络变化
StartNetworkMonitoring();
}
private void StartNetworkMonitoring()
{
// 使用完全限定的事件名称
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged += OnNetworkAvailabilityChanged;
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged;
StatusText.Text = "状态: 正在监控网络...";
}
private void OnNetworkAvailabilityChanged(object sender, System.Net.NetworkInformation.NetworkAvailabilityEventArgs e)
{
// 使用Dispatcher确保在UI线程执行
Dispatcher.Invoke(() =>
{
if (!e.IsAvailable)
{
ClearConnections();
StatusText.Text = "状态: 网络已断开 - " + DateTime.Now.ToString("HH:mm:ss");
}
else
{
StatusText.Text = "状态: 网络已恢复 - " + DateTime.Now.ToString("HH:mm:ss");
}
});
}
private void OnNetworkAddressChanged(object sender, EventArgs e)
{
Dispatcher.Invoke(() =>
{
ClearConnections();
StatusText.Text = "状态: 检测到网络切换 - " + DateTime.Now.ToString("HH:mm:ss");
});
}
private void ClearConnections()
{
connections.Clear();
connections.Add("连接列表已清空");
}
protected override void OnClosed(EventArgs e)
{
// 清理事件监听
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged -= OnNetworkAvailabilityChanged;
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged -= OnNetworkAddressChanged;
base.OnClosed(e);
}
}
}