2015-10-22 3 views
-2

Je suis vraiment confus. Mon Program.cs est la suivante:Comment puis-je appeler une fonction à partir d'une classe

using System; 
using System.IO; 
using System.Net.NetworkInformation; 
using System.Collections.Generic; 

namespace PingApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string filename = @"PingLog.csv"; 
      { 
       using (var writer = new StreamWriter(filename, true)) 
       { 

       } 
      } 
     } 
    } 
} 

J'ai une classe appelée WebSitePing.cs et c'est là où j'ai tout mon code. Ceci est ma WebSitePing.cs classe:

using System; 
using System.Collections.Generic; 
using System.Net.NetworkInformation; 

namespace PingApp 
{ 
    public class WebSitePing 
    { 
     public void Ping() 
     { 
      var lstWebSites = new List<string> 
      { 
       "www.mearstransportation.com", 
       "www.amazon.com", 
       "www.ebay.com", 
       "www.att.com", 
       "www.verizon.com", 
       "www.sprint.com", 
       "www.centurylink.com", 
       "www.yahoo.com" 
      }; 
      foreach (string website in lstWebSites) 
      { 
       var roundTripTime = new List<string>(); 
       for (var i = 0; i < 4; i++) 
       { 
        try 
        { 
         var myPing = new Ping(); 
         var reply = myPing.Send(website, 1000); 
         if (reply != null) 
         { 
          Console.WriteLine("{0}, {1}", website, string.Join(" , ", roundTripTime)); 
         } 
        } 
        catch 
        { 
         Console.WriteLine("ERROR: You have some TIMEOUT issue"); 
        } 
       } 
      } 
     } 
    } 
} 

Je dois appeler ma classe en WebSitePing.cs Program.cs pour que je puisse créer le fichier PingLog.csv et exécuter le code dans WebSitePing.cs et tous les résultats de mon ping seront enregistrés dans le fichier que j'ai créé à partir de Program.cs. Quelqu'un peut-il m'aider à comprendre comment je peux faire cela?

+0

Dans votre fichier 'Program.cs', vous devez * instancier * votre classe' WebSitePing'. Ensuite, vous pourrez utiliser cette instance pour appeler votre méthode 'Ping()'. –

+0

alternativement faire la méthode que vous voulez appeler statique (il ne semble pas s'appuyer sur des variables instanciées), mais je suis d'accord que la meilleure approche instancie probablement simplement WebSitePing –

+0

Créer une instance de l'objet WebSitePing en faisant 'var a = new WebSitePing() 'dans' Program.cs'. Ensuite, appelez simplement la méthode en faisant 'a.Ping()'. –

Répondre

1

Votre question a été essentiellement répondu dans les commentaires ci-dessus, mais la voici:

namespace PingApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var pinger = new WebSitePing(); 

      pinger.Ping(); 
     } 
    } 
} 

En plus de cela, vous devrez déplacer votre bloc using dans la méthode Ping(), plutôt qu'à l'intérieur le Program.cs lui-même. De cette façon, au lieu d'utiliser Console.WriteLine(), vous allez ajouter la sortie à votre StreamWriter à la place.

Vous pouvez régler la sortie de votre Console comme dans @ réponse de Enigmativity, qui rediriger vos appels vers le Console.WriteLine()StreamWriter au lieu de la console de débogage.

+0

Ok, je comprends mieux, merci .... laissez-moi essayer cela. – NewDev

+0

Mais dans la réponse de @ Enigmativity, c'est de renvoyer les sites Web mais pas les résultats de ping, je ne pense pas que je passe par tout le code de WebSitePing.cs – NewDev

1

Essayez ceci:

string filename = @"PingLog.csv"; 
{ 
    using (var writer = new StreamWriter(filename, true)) 
    { 
     Console.SetOut(writer); 
     var ping = new WebSitePing(); 
     ping.Ping(); 
    } 
} 

Non seulement vous devez créer une instance de WebSitePing avant de pouvoir appeler .Ping(), mais vous devez aussi régler la sortie du Console à votre writer.

Vous feriez mieux de faire Ping() retour IEnumerable<string>, puis en écrivant ces lignes. Ce serait un programme plus propre. Le code pour WebSitePing est un peu cassé. Voici la solution la plus simple.

public class WebSitePing 
{ 
    public void Ping() 
    { 
     var lstWebSites = new List<string> 
      { 
       "www.mearstransportation.com", 
       "www.amazon.com", 
       "www.ebay.com", 
       "www.att.com", 
       "www.verizon.com", 
       "www.sprint.com", 
       "www.centurylink.com", 
       "www.yahoo.com" 
      }; 
     foreach (string website in lstWebSites) 
     { 
      var roundTripTime = new List<long>(); 
      for (var i = 0; i < 4; i++) 
      { 
       using (var myPing = new Ping()) 
       { 
        var reply = myPing.Send(website, 1000); 
        if (reply != null) 
        { 
         roundTripTime.Add(reply.RoundtripTime); 
        } 
       } 
      } 
      Console.WriteLine("{0}, {1}", website, String.Join(", ", roundTripTime)); 
     } 
    } 
} 
+0

Si j'essaie cela, j'obtiens les sites Web dans le fichier .csv mais pas les résultats du ping, comment puis-je imprimer les résultats du ping? – NewDev

+0

@NewDev - Votre code dans 'WebSitePing' n'est pas correct. Il ne reçoit pas l'heure de la réponse de l'appel '.Send()'. – Enigmativity

+0

Savez-vous comment je peux le réparer? pourquoi est-ce incorrect? Ça fonctionnait quand j'avais tout dans un fichier. – NewDev