winforms 网络接口列表、抽象类型或接口

x4shl7ld  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(201)

我有程序列出硬盘驱动器和网络接口,如在这张图片:

如果我点击硬盘名称,我可以看到文本框中的驱动器类型。这是工作正常。但是,如果我尝试在网络接口上的这个代码不工作。它给出了错误CS0144:无法创建抽象类型或接口"NetworkInterface"的示例
代码如下:

private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            textBox1.Text = "";
            DriveInfo[] Drives = DriveInfo.GetDrives();
            foreach (DriveInfo drv in Drives)
            {
                listBox1.Items.Add(drv.Name);
            }
        }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            String strDrive = (string)listBox1.SelectedItem;
            DriveInfo drive = new DriveInfo(strDrive);

            textBox1.Text = drive.DriveType.ToString();
        }

这里是不工作的网络接口:

private void button3_Click(object sender, EventArgs e)
        {
            listBox2.Items.Clear();
            textBox2.Text = "";
            NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in adapters)
            {
                listBox2.Items.Add(adapter.Name);
            }
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            String strInterface = (string)listBox2.SelectedItem;
            NetworkInterface adapter = new NetworkInterface(strInterface);
            textBox2.Text = adapter.Description.ToString();
        }

这一行是错误的:网络接口适配器=新的网络接口(strInterface);

2nbm6dog

2nbm6dog1#

NetworkInterface docs
不创建此类的示例; GetAllNetworkInterfaces方法返回一个数组,其中包含本地计算机上每个网络接口的此类示例。
因此,可以再次调用GetAllNetworkInterfaces并过滤结果:

var adapter = NetworkInterface.GetAllNetworkInterfaces()
    .FirstOrDefault(ni => ni.Name == strInterface);
// if not null ...

或者将先前调用的结果存储在某个字段/属性中,然后使用这些结果进行搜索,或者只使用结果数组作为listBox2本身的数据源。

klr1opcd

klr1opcd2#

您可以将NetworkInterface示例直接存储在列表框项目中:

listBox2.Items.Add(adapter);

并设置listBox2.DisplayMember = nameof(NetworkInterface.Name)以使列表框显示它们的名称。
然后,您可以访问选定的适配器作为:

var adapter = (NetworkInterface)listBox2.SelectedItem;;

相关问题