2015-10-22 3 views
-2

Я действительно смущен. Мой Program.cs выглядит следующим образом:Как я могу вызвать функцию из класса

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)) 
       { 

       } 
      } 
     } 
    } 
} 

Тогда у меня есть класс с именем WebSitePing.cs и это, где у меня есть все мои кода. Это мой WebSitePing.cs класс:

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"); 
        } 
       } 
      } 
     } 
    } 
} 

Я должен позвонить в моем классе WebSitePing.cs в Program.cs, так что я могу создать файл PingLog.csv и запустить код в WebSitePing.cs и все результаты моего пинга будут сохранены в файл, который я создал из Program.cs. Может кто-нибудь помочь мне выяснить, как я могу это сделать?

+0

В вашем файле 'Program.cs' вам необходимо * создать экземпляр * вашего класса' WebSitePing'. Затем вы сможете использовать этот экземпляр для вызова метода 'Ping()'. –

+0

, альтернативно, сделать метод, который вы хотите вызвать static (он, похоже, не полагается на какие-либо встроенные переменные), но я согласен с тем, что лучший подход, вероятно, просто создает экземпляр WebSitePing. –

+0

Создайте экземпляр объекта WebSitePing, выполнив var a = новый WebSitePing() 'в' Program.cs'. Затем просто вызовите метод, выполнив 'a.Ping()'. –

ответ

1

Ваш вопрос в основном ответили на приведенные выше замечания, но здесь это:

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

      pinger.Ping(); 
     } 
    } 
} 

В дополнение к этому, вам нужно будет переместить using блок в метод Ping(), а не внутри Program.cs. Таким образом, вместо того, чтобы использовать Console.WriteLine(), вы добавите результат на свой StreamWriter.

В качестве альтернативы, вы можете установить выход вашего Console как в @ ответ Enigmativity в, который будет перенаправлять вызовы Console.WriteLine() к StreamWriter а не к консоли отладчика.

+0

Хорошо, я понимаю это лучше, спасибо ... позвольте мне попробовать. – NewDev

+0

Но в ответе @ Enigmativity, возвращении веб-сайтов, но не в результатах ping, я не думаю, что пройду через весь код из WebSitePing.cs – NewDev

1

Попробуйте это:

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

Не только вы должны создать экземпляр WebSitePing, прежде чем вы можете позвонить .Ping(), но вы также должны установить выход Console к вашему writer.

Вам было бы лучше сделать Ping() return IEnumerable<string>, а затем написать эти строки. Это была бы более чистая программа.


Ваш код для WebSitePing немного сломан. Вот простейшее решение.

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

Если я попробую это, я получаю сайты в CSV-файле, но не результаты ping, как распечатать результаты ping? – NewDev

+0

@NewDev - неправильный код в 'WebSitePing'. Он не получает время от ответа от вызова '.Send()'. – Enigmativity

+0

Знаете ли вы, как я могу это исправить? почему это неверно? Он работал, когда у меня было все в одном файле. – NewDev