Service

Тема в разделе ".NET", создана пользователем f.7, 8 дек 2006.

  1. f.7

    f.7 Гость

    Подскажите как сделать так, чтобы программа зыпускалась как служба????
     
  2. Dottik

    Dottik Гость

    Вот две статьи, думаю помогоут.
     

    Вложения:

    • service.rar
      Размер файла:
      9,4 КБ
      Просмотров:
      101
  3. f.7

    f.7 Гость

    Вот чтобы не создавать новой темы решил написать тута..... Научился я запускать службы и остановливать, но вот второй день уже не могу решить одну прблему... Мне служба необходима для того чтобы она писала лог, ну тоесть чтобы одна функция вызывалась через определённый отрезок времени, пробовал я это повесить на TIMER, но почемуто он не работает в WindowsService, потом на одном форуме я нашел вот такое решение:
    protected override void OnStart(string[] args)
    {
    ServiceThread();
    }
    ........
    private static void ServiceThread()
    {
    int time_to_sleep = 100000;
    while (true)
    {
    //А вот тут вызываем нужную фенкцию
    System.Threading.Thread.Sleep(time_to_sleep);
    }
    }
    но это решение не хорошое, т.к. останавливается работа всей службы...

    Вот я и хотел бы узнать как же мне вызывать в сервисе функцию через допустим минуту..????
    Буду очень признателен тем, кто откликнеться и не оставит меня в беде..........
     
  4. karlito

    karlito Гость

    Для: f.7
    Есть целых три Timer-а в FCL. Какой из них ты используешь? как и когда ты его регистрируешь?
    Для твоей ситуации лучше всего System.Threading.Timer.
     
  5. f.7

    f.7 Гость

    Для karlito
    Спасиба за совет, решение я уже нашел, таймер использую System.Timers.Timer, правда сейчас этот код на работе, а у меня сейчас сессия, но если каму нада вы напишите я с удовольствием выложу когда закончиться сессия......
     
  6. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    Необходимо решение этой проблемы.

    Вообщем имеется windows service и он должен переодически(скажем каждые 10 сек) вызывать определенуую функцию (например записать в лог сообщение) . Как это сделать?
     
  7. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    Если кому понадобиться вот решение:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    namespace WindowsService1
    {
    public partial class Service1 : ServiceBase
    {
    System.Windows.Forms.Timer timer1;
    Form form1;
    Thread messageThread;

    public Service1()
    {
    InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
    messageThread = new Thread(new ThreadStart(ThreadProc));
    messageThread.Start();
    messageThread.IsBackground = true;
    }

    void ThreadProc()
    {
    form1 = new Form();
    timer1 = new System.Windows.Forms.Timer();
    timer1.Tick += new EventHandler(timer_Tick);
    timer1.Interval = 10000; //задаем нужный нам интервал в мс
    timer1.Start();
    form1.Show();

    Application.Run(form1);
    }
    void timer_Tick(object sender, EventArgs e)
    {
    //Эта функция будет вызываться переодически через заданное количество мс указанных в timer1.Interval
    //Здесь и реализуем нужную нам функциональность
    }
    }
    }
     
  8. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    Окна видно не будет. А нужно оно для таймера.
    Если подскажете как реализовать таймер без окна было бы здорово. ))
    System.Timers.Timer срабатывает всего один раз. А нужно чтоб функция вызывалась переодически.
     
  9. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    класс System.Threading.Timer, например
    А код вы проверили? Настроили правильно?=)<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">вот пример</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    using System;
    //Включаем необходимое пространство имен.
    using System.Timers;
    public class MyTimer
    {
    static int n=0; //Счетчик.
    public static void Main()
    {
    System.Timers.Timer tmr = new System.Timers.Timer();
    tmr.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
    tmr.Interval=1000; //Устанавливаем интервал в 1 сек.
    tmr.Enabled=true; //Вкючаем таймер.
    while(n!=4); //Таймер тикает 4 раза.
    }
    //Метод для отработки события Elapsed таймера.
    public static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
    //Делаем некоторые действия.
    Console.WriteLine("Hello World!");
    //Увеличиваем счетчик.
    n++;
    }
    }
    Не рекомендует Рихтер этот класс использовать. Старый он..
     
  10. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    На счет класса описка. Именно System.Threading.Timer я и имел ввиду. Реализация была почти такая же что привели вы. Но мне нужно чтоб
    1)он срабатывал неограниченное число раз.
    2) Как реализовать это в службе?
     
  11. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    1. В примере выше - что мешает просто запустить цикл который прервется только если какая-то переменная станет TRUE?
    2. От того, что у вас служба - класс не изменится, поверьте=) Точно так же)
     
  12. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    1. Мешает 100 % загрузка процессора
    2. Куда передается управление в службе после завершения метода OnStart ? Хотя я щас проверю ))
     
  13. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    У вас ведь таймер в цикле=> будет задержка. Не будет такого.
     
  14. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    Я так понимаю вы предлагаете следующее ?

    using System;
    //Включаем необходимое пространство имен.
    using System.Timers;
    public class MyTimer
    {
    static int n=0; //Счетчик.
    public static void Main()
    {
    System.Timers.Timer tmr = new System.Timers.Timer();
    tmr.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
    tmr.Interval=1000; //Устанавливаем интервал в 1 сек.
    tmr.Enabled=true; //Вкючаем таймер.
    while(True); //Таймер тикает 4 раза.
    }
    //Метод для отработки события Elapsed таймера.
    public static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
    //Делаем некоторые действия.
    Console.WriteLine("Hello World!");
    //Увеличиваем счетчик.
    n++;
    }
    }
     
Загрузка...
Похожие Темы - Service
  1. lmike
    Ответов:
    14
    Просмотров:
    289
  2. NickProstoNick
    Ответов:
    6
    Просмотров:
    176
  3. savl
    Ответов:
    12
    Просмотров:
    352
  4. lmike
    Ответов:
    23
    Просмотров:
    785
  5. Proger J.
    Ответов:
    1
    Просмотров:
    204

Поделиться этой страницей