成功启动服务但等待互联网连接

时间:2014-08-29 19:47:57

标签: c# asynchronous service webclient

我对c#很新,我正在编写系统服务。该服务需要做的第一件事就是连接到互联网并下载新的设置文件。但是,由于无法保证其运行的计算机在启动时将具有Internet连接,因此该服务需要间歇性地尝试下载该文件。

我遇到的问题是,坐在循环中试图下载文件服务超时(无法启动)。

如何创建一个循环来间歇性地轮询我的服务器,同时仍允许服务启动完成?

更新

我已将以下代码放在一起。它似乎以非阻塞的方式工作,但我无法弄清楚如何从netCheck函数中停止计时器?

public static void Start()
{

    // Start the system timer update
    System.Timers.Timer time = new System.Timers.Timer();
    time.Interval = 5*1000; // 3hrs
    time.Elapsed +=new System.Timers.ElapsedEventHandler(netCheck);
    time.Start();



}

public static void netCheck(object sender, EventArgs e)
{
    try
    {
        WebClient webClient = new WebClient();
        string download = webClient.DownloadString("http://www.domain.com/ping.php");

        if (!string.IsNullOrEmpty(download))
        {
            //stop the clock
        }
        else
        {
            Console.WriteLine("No Net...");
        }
    }
    catch (Exception)
    {
        Console.WriteLine("No Net...");
    }
}

2 个答案:

答案 0 :(得分:0)

您可以将服务的启动类型设置为自动(延迟启动),如下所示。这将允许您的网络连接在服务启动之前运行并就位。

或者,如果仍然可能没有互联网连接,即使在延迟启动后,请让您的服务启动计时器并在计时器回调中检查互联网连接。

来自https://superuser.com/a/285655

  

标记为自动(延迟启动)的服务将在不久后启动   指定为自动的所有其他服务已启动。

enter image description here

答案 1 :(得分:0)

这很容易。只需将Enable设置为false

即可
time.Enable=false;