C#创建一个WPF应用程序,用多任务来扫描一个网段内的计算机,根据计算机的IP地址获取其主机域名。
MainWindow.xaml
<Window x:Class="shiyan1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:shiyan1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid Margin="0,0,99.6,0">
<StackPanel HorizontalAlignment="Left" Height="290" VerticalAlignment="Top" Width="539" Margin="93,40,0,0">
<GroupBox Header="扫描的IP地址范围" Height="83" Width="539">
<DockPanel HorizontalAlignment="Left" Height="30" LastChildFill="False" Margin="10,10,0,0" VerticalAlignment="Top" Width="485" >
<Label Content="地址前端:" Height="24" VerticalAlignment="Top" Width="75"/>
<TextBox Name="qianduan" Height="14" TextWrapping="Wrap" Text="192.168.1." VerticalAlignment="Top" Width="73" Margin="0,6,0,0"/>
<Label Content="起始值:" Height="30" VerticalAlignment="Top" Margin="15,0,0,0" Width="64"/>
<TextBox Name="qishi" Height="14" TextWrapping="Wrap" Text="5" VerticalAlignment="Top" Width="55" Margin="0,6,0,0" />
<Label Content="终止值:" Height="30" VerticalAlignment="Top" Width="56"/>
<TextBox Name="zhongzhi" Height="14" TextWrapping="Wrap" Text="10" VerticalAlignment="Top" Width="55" Margin="0,6,0,0" />
<Button Content="开始扫描" Name="btn1" Height="18" VerticalAlignment="Top" Width="58" Margin="15,6,0,0" RenderTransformOrigin="0.502,0.5" Click="Btn1_Click"/>
</DockPanel>
</GroupBox>
<Label Margin="10,5,10.2,0" Background="Yellow" Foreground="Black" Content="IP地址有误,请更正" HorizontalContentAlignment="Center"
Grid.Row="1" Width="519" Name="error"/>
<GroupBox Header="扫描信息" Height="167" Margin="0,10,0.2,0">
<ListBox HorizontalAlignment="Left" Height="129" VerticalAlignment="Top" Width="519" Margin="0,10,0,0" Name="listbox"/>
</GroupBox>
</StackPanel>
</Grid>
<Window.Resources>
<Style TargetType="TextBox">
<EventSetter Event="TextChanged" Handler="TextBox_TextChanged"/>
</Style>
</Window.Resources>
</Window>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace shiyan1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
error.Visibility = System.Windows.Visibility.Collapsed;
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
String s1 = qianduan.Text+qishi.Text;
IPAddress ip1, ip2;
if(IPAddress.TryParse(s1,out ip1)==false||IPAddress.TryParse(s1,out ip2))
{
error.Visibility = System.Windows.Visibility.Visible;
btn1.IsEnabled = false;
return;
}
else
{
btn1.IsEnabled = true;
error.Visibility = System.Windows.Visibility.Collapsed;
}
}
private void Btn1_Click(object sender, RoutedEventArgs e)
{
int start = int.Parse(qishi.Text);
int end = int.Parse(zhongzhi.Text);
if(start>end)
{
MessageBox.Show("终止值大于起始值");
}
listbox.Items.Clear();
for(int i = start; i <= end; i++)
{
IPAddress ip = IPAddress.Parse(qianduan.Text + i);
Task.Run(() => Scan(ip));
}
}
private void Scan(IPAddress ip)
{
Stopwatch stopwatch = Stopwatch.StartNew();
string host = "";
try
{
host = Dns.GetHostEntry(ip).HostName;
}
catch
{
host = "(不在线)";
}
stopwatch.Stop();
listbox.Dispatcher.Invoke(() => listbox.Items.Add(
string.Format("扫描地址:{0},扫描用时:{1}毫秒,主机DNS名称:{2}", ip, stopwatch.ElapsedMilliseconds, host))
);
}
}
}