我对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...");
}
}
答案 0 :(得分:0)
您可以将服务的启动类型设置为自动(延迟启动),如下所示。这将允许您的网络连接在服务启动之前运行并就位。
或者,如果仍然可能没有互联网连接,即使在延迟启动后,请让您的服务启动计时器并在计时器回调中检查互联网连接。
来自https://superuser.com/a/285655:
标记为自动(延迟启动)的服务将在不久后启动 指定为自动的所有其他服务已启动。
答案 1 :(得分:0)
这很容易。只需将Enable设置为false
即可time.Enable=false;