2011-11-23 34 views
10

Có cách nào để ngắt kết nối mạng tạm thời và lập trình trong .NET 4.0 không?Lập trình ngắt kết nối mạng một cách có lập trình

Tôi biết tôi có thể nhận được trạng thái kết nối mạng hiện tại bằng cách làm này ...

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 

nhưng đối với mục đích thử nghiệm tôi muốn kiểm tra hành vi ứng dụng của tôi khi nó mất kết nối mạng (không có chất rút cáp mạng).

Xin cảm ơn, Chris.

+3

Chỉ cần tháo điều dang. :) – rfmodulator

+2

Có, tôi nhận ra rằng tôi có thể rút cáp mạng. Nhưng như tôi đã nói trong câu hỏi của mình, tôi muốn ngắt kết nối mạng để hỗ trợ kiểm tra chức năng kết nối và ngắt kết nối trong ứng dụng. – ChrisNel52

Trả lời

16

Bạn có thể làm điều đó với WMI. Đây là một trong số chúng tôi sử dụng để vô hiệu hóa bộ điều hợp vật lý để kiểm tra các loại tình huống này.

using System.Management; 
using System.Linq; 

namespace DisableNIC 
{ 
    internal static class Program 
    { 
     private static void Main() 
     { 
      var wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter " + 
              "WHERE NetConnectionId != null " + 
               "AND Manufacturer != 'Microsoft' "); 
      using (var searcher = new ManagementObjectSearcher(wmiQuery)) 
      { 
       foreach (var item in searcher.Get().OfType<ManagementObject>()) 
       { 
        if ((string) item["NetConnectionId"] != "Local Area Connection") 
         continue; 

        using (item) 
        { 
         item.InvokeMethod("Disable", null); 
        } 
       } 
      } 
     } 
    } 
} 

Bạn đã không cho thấy hệ điều hành, nhưng hoạt động này trong Windows 7 và Windows 8.

Note rằng bạn sẽ cần phải là người quản trị cho điều này hoạt động.

+0

Tôi thích nó. Thanh lịch, chính xác và bạn không bảo tôi rút cáp mạng :-) – ChrisNel52

+3

Lưu ý phụ: Phương thức này yêu cầu quyền quản trị trên Windows 7 (và có thể cả Windows 8 và Windows Vista) – Karsten

1

nếu bạn sử dụng 'API Wifi được quản lý', bạn chỉ cần xóa tiểu sử. Điều đó làm việc cho tôi.

WlanClient client = new WlanClient(); 

WlanClient.WlanInterface m_WlanInterface = client.Interfaces.Where(i => i.InterfaceDescription.Contains(InterfaceIdentifierString)).First(); 
m_WlanInterface.DeleteProfile(ConnectionProfileString); 

Nếu bạn cần phải kết nối lại với mạng đó, hãy chắc chắn để lưu hồ sơ cá nhân xml:

string xmlString = m_WlanInterface.GetProfileXml(ConnectionProfileString) 

Sau đó, bạn có thể tái sử dụng nó

m_WlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, xmlString, true); 
m_WlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, ConnectionProfileString); 
Các vấn đề liên quan