Я новичок в С# и нахожусь в процессе написания системного сервиса. Одной из первых вещей, которые необходимо выполнить службе, является подключение к Интернету и загрузка нового файла настроек. Однако, поскольку нет гарантии, что на машине, на которой он запущен, будет подключение к Интернету при запуске, службе необходимо периодически пытаться загрузить файл.
Проблема, с которой я сталкиваюсь, заключается в том, что, сидя в цикле, пытаясь загрузить файл, время обслуживания (не запускается).
Как создать цикл, который будет периодически опробовать мой сервер, все еще позволяя завершить запуск службы?
ОБНОВИТЬ
Я собрал следующий код. Кажется, он работает неблокирующим образом, но я не могу решить, как остановить таймер из функции 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...");
}
}
Это легко. Просто установите Enable на false
time.Enable=false;
Вы можете просто настроить тип запуска своей службы на "Автоматически" ("Задержанный старт"), как показано ниже. Это позволит вашему сетевому соединению работать и находиться на месте до начала вашего обслуживания.
Или, если все еще возможно, что у вас не будет подключения к Интернету, даже после отложенного старта, ваша служба запустит таймер и проверит подключение к Интернету в вашем обратном вызове таймера.
От https://superuser.com/a/285655:
Служба, отмеченная как "Автоматический" ("Задержанный старт"), начнется вскоре после того, как будут запущены все другие службы, назначенные как "Автоматически".