Запустите сервис успешно, но дождитесь подключения к интернету

1

Я новичок в С# и нахожусь в процессе написания системного сервиса. Одной из первых вещей, которые необходимо выполнить службе, является подключение к Интернету и загрузка нового файла настроек. Однако, поскольку нет гарантии, что на машине, на которой он запущен, будет подключение к Интернету при запуске, службе необходимо периодически пытаться загрузить файл.

Проблема, с которой я сталкиваюсь, заключается в том, что, сидя в цикле, пытаясь загрузить файл, время обслуживания (не запускается).

Как создать цикл, который будет периодически опробовать мой сервер, все еще позволяя завершить запуск службы?

ОБНОВИТЬ

Я собрал следующий код. Кажется, он работает неблокирующим образом, но я не могу решить, как остановить таймер из функции 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
    Когда заканчивается время обслуживания? Когда вы запускаете службу, вам не следует ждать в методе OnStart, а начинать новый поток, если вы хотите выполнить «более длительную работу».
  • 0
    Как сказал Патрик, вы не должны выполнять какую-либо обработку в методе OnStart () (я полагаю, это то, что вы подразумеваете под Start ()), которая занимает какое-то значительное время. Метод OnStart () предназначен для запуска одного или нескольких новых потоков, выполняющих работу службы, а затем немедленного возврата. Вы должны взглянуть на некоторые учебные пособия о том, как должна работать служба Windows - они довольно сильно отличаются от большинства программ.
Показать ещё 1 комментарий
Теги:
asynchronous
service
webclient

2 ответа

0

Это легко. Просто установите Enable на false

time.Enable=false;
0

Вы можете просто настроить тип запуска своей службы на "Автоматически" ("Задержанный старт"), как показано ниже. Это позволит вашему сетевому соединению работать и находиться на месте до начала вашего обслуживания.

Или, если все еще возможно, что у вас не будет подключения к Интернету, даже после отложенного старта, ваша служба запустит таймер и проверит подключение к Интернету в вашем обратном вызове таймера.

От https://superuser.com/a/285655:

Служба, отмеченная как "Автоматический" ("Задержанный старт"), начнется вскоре после того, как будут запущены все другие службы, назначенные как "Автоматически".

Изображение 174551

  • 0
    Меня больше беспокоит ноутбук (или модем dsl), у которого может не быть доступного соединения, пока пользователь его не инициирует.
  • 0
    Я просто добавил комментарий внизу моего ответа. Это помогает?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню