0

使用 Visual Studios RC 2017,将其模板用于 .NET Windows 窗体应用程序

尝试从我的计算机中获取 USB 设备列表,并将其粗略地粘贴到学校项目的 rTextbox 中,使用 System.Management 中名为“GetUSBDevices()”的函数。

尝试使用我知道System.Management 具有的功能来执行此操作,并且该功能在 Visual Studios C# 控制台应用程序模板中使用时有效,并且由于某种原因它无法识别参考...

我试过了:

  • 通过解决方案资源管理器添加 System.Management 作为参考

  • 重新安装 System.Management 参考

  • 直接从库中调用函数 [ System.Management.GetUSBDevices(); ]

到目前为止没有任何效果......

不起作用的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Management; //ISSUE HERE!
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Manager
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void DisplayProcess()
        {
            richTextBox1.Clear();
            Process[] plist = Process.GetProcesses();

            foreach (Process p in plist)
            {
                richTextBox1.Text += "Process " + p.Id.ToString() + " : " + p.ProcessName.ToString() + "\n";
            }

        }
//-----------------------------------ISSUE HERE-----------------------------
//-----------------------------------ISSUE HERE-----------------------------
//-----------------------------------ISSUE HERE-----------------------------
        private void DisplayUSB()
        {
            richTextBox1.Clear();

            var usbDevices = GetUSBDevices();

            foreach (var usb in usbDevices)
            {
                richTextBox1.Text += "USB Device " + usb.DeviceID;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            switch (button1.Text)
            {
                case "Start":
                    button1.Text = "USB";
                    DisplayProcess();

                    break;

                case "USB":
                    button1.Text = "Manager";
                    // DisplayUSB();
                    break;

                case "Manager":
                    DisplayProcess();
                    button1.Text = "USB";
                    break;

                                }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            switch(button1.Text)
            {
                case "Start":
                    MessageBox.Show("Please Start The Manager!","REFRESH ERROR");
                    break;

                case "USB":
                    DisplayProcess();
                    break;

                //case "Manager":
                //    DisplayUSB();
                //    break;

            }
        }
    }
}

给出的错误是:

Error   CS0103  The name 'GetUSBDevices' does not exist in the current context  Manager c:\users\*****\documents\visual studio 2017\Projects\Manager\Manager\Form1.cs   38  

错误 CS1579 foreach 语句无法对“?”类型的变量进行操作 因为 '?' 不包含 'GetEnumerator' Manager c:\users*****\documents\visual studio 2017\Projects\Manager\Manager\Form1.cs 40 的公共定义

有效的代码(取自获取已连接 USB 设备的列表 并经过个人测试,可在我的 PC 上正常工作)

namespace ConsoleApplication1
{
  using System;
  using System.Collections.Generic;
  using System.Management;  

  class Program
  {
    static void Main(string[] args)
    {
      var usbDevices = GetUSBDevices();

      foreach (var usbDevice in usbDevices)
      {
        Console.WriteLine("Device ID: {0}, PNP Device ID: {1}, Description: {2}",
            usbDevice.DeviceID, usbDevice.PnpDeviceID, usbDevice.Description);
      }

      Console.Read();
    }

    }
}

非常感谢我在这件事上能得到的任何帮助,所以它会起作用的!

4

1 回答 1

0

函数GetUSBDevices()不在System.Management您从其他SO question复制的代码中,而是在您复制的代码中。所以我的猜测是你忘了复制那段代码;-)。

于 2017-03-29T18:08:09.370 回答