1

我有一个ListView电话lvInformation,我只想添加远程网络中的活动计算机。但是如果它处于活动状态,当我得到响应时将需要很多秒。我想要这个多线程,它应该ListView在它处于活动状态时添加一台计算机并刷新ListView. 但我不知道怎么做。我正在使用以下代码,它也可以工作,但需要很多秒......

    System.Net.NetworkInformation.Ping objping = new System.Net.NetworkInformation.Ping();
    objping.SendAsync(_remoteComputerName, null);

    objping.PingCompleted += new PingCompletedEventHandler(objping_PingCompleted);;

    private void objping_PingCompleted(object sender, PingCompletedEventArgs e)
    {
        DomainComputers.Add(_remoteComputerName);
    }

DomainComputers是一个属性,并且绑定了 TwoWay。

4

1 回答 1

1

你可以尝试这样的事情:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public ObservableCollection<string> DomainComputers = new ObservableCollection<string>();

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        lvInformation.ItemsSource = DomainComputers;

        List<string> Computers = new List<string>();
        for (int i = 1; i < 255; i++)
        {
            Computers.Add("192.168.9." + i.ToString());
        }

        foreach (var comp in Computers)
        {
            System.Net.NetworkInformation.Ping objping = new System.Net.NetworkInformation.Ping();

            objping.PingCompleted += new PingCompletedEventHandler(objping_PingCompleted);

            objping.SendAsync(comp, comp);
        }


    }

    void objping_PingCompleted(object sender, PingCompletedEventArgs e)
    {
        if (e.Reply.Status == IPStatus.Success)
            DomainComputers.Add(e.UserState as string);
    }
}

在 XAML 中

<StackPanel>
    <ListView Name="lvInformation" />
    <Button Click="Button_Click" Content="Start" />
</StackPanel>

但以它为样本。我正在创建许多 Ping 对象。在现实生活中,我将创建 10 个数组,在 PingCompleted 事件中,我将使用它们 ping 队列中的另一台计算机。

于 2013-05-13T08:19:10.967 回答