none
Duda sobre servicio c# RRS feed

  • Pregunta

  • Buenas tengo una duda sobre programar un servicio.

    Cuando en el servicio, en el metodo OnStart pongo Thread.Sleep(cualquiernumero), el servicio se pilla y no arranca nunca. Lo que intento es esperar a que una variable (un path) tenga un valor que me da un FileSystemWatcher, y hasta que no tenga un valor, quiero que el servicio este simplemente esperando, pero no se ya como hacerlo

    Gracias

    Edito:

    No sé si me expliqué bien. Yo lo que quiero es que se ejecute cierto codigo cuando la variable path (obtenido de FileSystemWatcher) tenga un valor, mientras no tenga valor, que el servicio espere a que esa variable tenga otro valor.

    Lo que hace es procesar un archivo excel, vacio la variable path y que vuelva a esperar a que llegue otro archivo..

    No sé si me expliqué bien, gracias de nuevo

    • Editado Guille4712 viernes, 25 de mayo de 2018 10:47
    viernes, 25 de mayo de 2018 9:01

Todas las respuestas

  • Hola, puedes crearte un Timer y que se ejecute cada cierto tiempo. Cuando se ejecute el método que se lanza en cada evento del Timer, se validará la variable que indicas en tu pregunta.

    Te pongo un ejemplo

    private Timer _timer = new Timer() ; protected override void OnStart(string[] args) {

    // configurar el timer _timer.Elapsed += new ElapsedEventHandler(OnElapsedTime); _timer.Interval = 100000; _timer.AutoReset = false; _timer.Enabled = true; } // Este es el objeto que se usa para bloquear y controlar el acceso private static object _intervalSync = new object(); private void OnElapsedTime(object sender, ElapsedEventArgs e) { // bloqueamos la entrada en el método para evitar el solapamiento de ejecuciones de dos eventos de timer if (System.Threading.Monitor.TryEnter(_intervalSync)) { try { // Tu código aquí para chequear la variable path y demás } finally { // Nos aseguramos que Exit siempre se llama System.Threading.Monitor.Exit(_intervalSync); } } }



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos




    • Editado Sergio Parra viernes, 25 de mayo de 2018 15:17
    • Propuesto como respuesta Sergio Parra jueves, 7 de febrero de 2019 0:28
    viernes, 25 de mayo de 2018 10:04
  • Me dice que el campo Service1._timer nunca se asigna y que siempre tendrá valor null. Y el servicio no consigue arrancar..
    viernes, 25 de mayo de 2018 10:37
  • Cierto, no había inicializar el objeto. He editado el código. Ten en cuenta que es un ejemplo. Adaptalo

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 25 de mayo de 2018 15:18