如何从类中调用函数

时间:2015-10-22 00:10:53

标签: c# function class ping

我真的很困惑。 我的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中运行代码,我的ping的所有结果都将保存到文件中我是从Program.cs创建的。 有人可以帮我弄明白我该怎么做吗?

2 个答案:

答案 0 :(得分: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()返回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));
        }
    }
}

答案 1 :(得分:1)

您的问题基本上已在上述评论中得到解答,但现在是:

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

            pinger.Ping();
        }
    }
}

除此之外,您还需要将using块移至Ping()方法,而不是Program.cs内部。这样,您可以将输出附加到Console.WriteLine(),而不是使用StreamWriter

或者,您可以在@ Enigmativity的答案中设置Console的输出,这会将您的Console.WriteLine()调用重定向到StreamWriter,而不是重定向到调试器控制台。