Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
Все это охвачено (включая разницу между подключением к сети и подключением сети к Интернету) по адресу http://msdn.microsoft.com/en-us/library/ee264321 (VS. 85) .aspx . Надеюсь, вы хотели разместить этот тег Windows 7 на своем посту, потому что все это довольно новое.
Ключ INetworkListManager.get_IsConnectedToInternet()
, который в значительной степени делает то, что он говорит на жестяной банке. Вы должны немного перескочить, чтобы зарегистрироваться для событий и т. Д. Code Pack обертывает некоторые из них для вас и имеет образец сети, который вы можете адаптировать.
вам нужно использовать WMI.
Это пример для обнаружения разъединения: (чтобы проверить, что он создает файл .vbs и запускает его)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("Select * from MSNdis_StatusMediaDisconnect")
Do While True
Set strLatestEvent = colMonitoredEvents.NextEvent
Wscript.StdOut.Write "A network connection has been lost: "
Wscript.StdOut.Writeline strLatestEvent.InstanceName
Loop
В какой-то мере я смог решить эту проблему. Мне удалось найти образец кода в проекте кода http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=34650 . Всем спасибо за ответы.
, особенно ссылка на статью, которую опубликовал mr gregory, очень помог мне.
Это сработало для меня!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.NetworkInformation;
namespace ConsoleApplication6
{
class Program
{
private void AvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
if (e.IsAvailable)
Console.WriteLine("Network connected!");
else
Console.WriteLine("Network dis connected!");
}
public void Form1()
{
NetworkChange.NetworkAvailabilityChanged += AvailabilityChanged;
}
static void Main(string[] args)
{
Program p = new Program();
p.Form1();
Console.ReadLine();
}
}
}
Вы можете использовать класс NetworkChange с событием NetworkAvailabilityChanged:
NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;
Поскольку это системное событие, убедитесь, что вы удалили событие, когда закончите, см. этот пост здесь: Вы должны быть осторожны с использованием обработчика событий для NetworkChange
попробуйте:
private void AvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
if (e.IsAvailable)
Console.WriteLine("Wi-Fi conectado " + DateTime.Now );
else
Console.WriteLine("Wi-Fi desconectado " + DateTime.Now);
}
public Inicio()
{
InitializeComponent();
NetworkAvailabilityChangedEventHandler myHandler = new NetworkAvailabilityChangedEventHandler(AvailabilityChanged);
NetworkChange.NetworkAvailabilityChanged += myHandler;
}