2013-08-22 79 views
1

我编写了一个小型控制台应用程序,它与远程站点连接,下载一些数据并对其进行处理。由于它是网络操作,因此我希望我的应用程序足够智能以在没有互联网连接时进入暂停状态。如果互联网连接可用,它应该恢复工作。检测控制台应用程序中的Internet连接/断开连接C#

我到目前为止所做的是如果我运行应用程序,它开始从远程站点下载数据。如果我断开互联网连接,则通过显示适当的信息来正确运行。但是一旦网络连接启动,它就会恢复,并且只会为while循环的一次迭代下载数据。

下面是代码:

class Program 
{ 
    static bool networkIsAvailable = false; 
    static StreamWriter writer = null; 
    static int i = 1; 
    static string URI = "http://xxxxxxxxxxxxxxxxxxxxxxxxxxx/" + i + "/"; 

    static void Main(string[] args) 
    { 
     writer = new StreamWriter("c:\\StudentsList.txt", true); 

     NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged); 
     NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); 
     foreach (NetworkInterface nic in nics) 
     { 
      if (
       (nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.NetworkInterfaceType != NetworkInterfaceType.Tunnel) && 
       nic.OperationalStatus == OperationalStatus.Up) 
      { 
       networkIsAvailable = true; 
      } 
     } 

     if (!networkIsAvailable) 
      Console.WriteLine("Internet connection not available! We resume as soon as network is available..."); 
     else 
      ConnectToPUServer(); 
    } 

    public static void ConnectToPUServer() 
    { 
     var client = new WebClient(); 
     while (i < 500 && networkIsAvailable) 
     { 
      string html = client.DownloadString(URI); 
      //some data processing 
      Console.WriteLine(i); 
      i++; 
      URI = "http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/" + i + "/"; 
     } 
    } 

    static void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e) 
    { 
     networkIsAvailable = e.IsAvailable; 
     if (!networkIsAvailable) 
      Console.WriteLine("Internet connection not available! We resume as soon as network is available..."); 
     while (!networkIsAvailable) 
     { 
      //waiting for internet connection 
     } 
     ConnectToPUServer(); 
     Console.WriteLine("Complete."); 
     writer.Close(); 
    } 
} 

恢复后,为什么而ConnectToPUServer循环执行一次?

谢谢。

+0

Visual Studio是一个编辑器,并提供您的代码没有任何信息是适用的。请指出.Net的版本。 – OmegaMan

+0

.NET Framework 4.5 – Azeem

+0

我只是运行你的程序和你提到的while循环运行你指定的数量...... – Zaki

回答

2

如果NetworkChange_NetworkAvailabilityChanged是被解雇的每一个NIC改变它的地位也没有必要while循环等待连接

我也动writer.close和方法的结束时间ConnectToPUServer

public static void ConnectToPUServer() 
{ 
    var client = new WebClient(); 
    while (i < 500 && networkIsAvailable) 
    { 
     string html = client.DownloadString(URI); 
     //some data processing 
     Console.WriteLine(i); 
     i++; 
     URI = "http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/" + i + "/"; 
    } 
    Console.WriteLine("Complete."); 
    writer.Close(); 

} 

static void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e) 
{ 
    networkIsAvailable = e.IsAvailable; 
    if (!networkIsAvailable) 
    { 
     Console.WriteLine("Internet connection not available! We resume as soon as network is available..."); 
    } 
    else 
    { 
     ConnectToPUServer(); 
    } 
} 
相关问题