2009-08-12 21 views
6

Tôi muốn phát hiện khi thiết bị được kết nối với cổng ethernet của máy mà ứng dụng của tôi đang chạy. Tôi biết làm thế nào để làm điều này với một cổng USB nhưng vấn đề là, Port không phải là USB!Phát hiện chèn/tháo cổng Ethernet trong ứng dụng winforms của tôi?

Nếu đó là thiết bị USB, tôi chỉ đơn giản là ghi đè WndProc và nhận tin nhắn, nếu là WM_DEVICECHANGE, thì tôi là người chiến thắng, tôi tự hỏi liệu nó có đơn giản như thế này với bất kỳ thiết bị nào có thể cắm vào cổng?

Tôi không muốn biết nếu có bất kỳ điều gì xảy ra hoặc nếu thiết bị đang hoạt động, chỉ cần tìm xem có chèn hoặc xóa không.

Trả lời

2

Tôi chưa bao giờ tự sử dụng nó, nhưng tôi nghĩ rằng sự kiện NetworkChange.NetworkAvailabilityChanged có thể phù hợp với nhu cầu của bạn.

Cập nhật

Một cuộc điều tra ngắn gọn chỉ ra rằng NetworkChange.NetworkAddressChanged có thể làm việc tốt hơn:

public static void Main() 
{ 

    NetworkChange.NetworkAddressChanged += (s, e) => 
    { 
     NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); 
     foreach (var item in nics) 
     { 
      Console.WriteLine("Network Interface: {0}, Status: {1}", item.Name, item.OperationalStatus.ToString()); 
     } 
    }; 

    string input = string.Empty; 
    while (input != "quit") 
    { 
     input = Console.ReadLine(); 
    } 
} 
0

Tôi không chắc chắn nếu đó là chính xác phù hợp với nhu cầu của bạn, nhưng bạn có thể có một cái nhìn tại System.Net.NetworkInformation.NetworkChange lớp học, trong đó có 2 sự kiện mà bạn có thể sử dụng:

  • NetworkAddressChanged
  • NetworkAvailabilityChanged

Trong xử lý sự kiện, bạn có thể kiểm tra xem giao diện mạng có liên quan là một cổng Ethernet

0

Lớp NetworkChange cung cấp cho bạn với một sự kiện NetworkAvailabilityChanged kích hoạt khi giao diện chuyển từ dưới lên trên hoặc ngược ngược lại. Có thể không phải là cấp độ thấp như bạn có thể tìm kiếm nhưng bạn không cụ thể trong mục tiêu của bạn trong việc theo dõi sự kiện này.

Các vấn đề liên quan