Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB.NET] Ciclare un servizio

    Ciao volevo sapere se era possibile fare in modo che un servizio continui a ripetere le sue operazioni, magari grazie a un ciclo "DO...LOOP"

    ho provato ad inserire il codice in un cilco, ma in "SUB ONSTART", e ho visto che non viene gestito: in pratica non si avvia mai il servizio, ma rimane in uno stato ibrido; invece io vorrei che si avvii e poi continui ad eseguire alcune operazioni
    (il codice di per sè è corretto perchè in una "Form" fa esattamente quello che voglio io)

    devo inserire del codice nel "Main"?

    Grazie

    p.s. linguaggio Visual Basic

  2. #2

    Re: [VB.NET] Ciclare un servizio

    Avvia il codice che deve essere eseguito in un ciclo in un thread separato lasciando al thread principale la gestione degli eventi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quando si scrive un servizio, e non si sa come funziona, non si puo' pretendere che faccia quello che ci si aspetta ...

    La OnStart "deve" terminare per indicare che il servizio e' correttamente avviato.

    Quindi, l'unica cosa che puoi fare nella OnStart (che devi fare) e' avviare un thread (worker thread) che esegua il codice del tuo servizio.

  4. #4
    grazie alle vostre indicazioni ho inserito il seguente codice in OnStart:

    Codice PHP:
       Protected Overrides Sub OnStart(ByVal args() As String)

            
    Dim workerThread = New Thread(New ThreadStart(AddressOf ServiceWorkerMethod))
            
    workerThread.Start()

    End Sub 
    quindi a parte ho il mio worker thread:

    Codice PHP:
    Public Sub ServiceWorkerMethod()

    Do
    ...
    codice
    Loop

    End Sub 
    Funziona correttamente ma non mi ripete le istruzioni nel ciclo, come mai?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cioe'?

    Da cosa te ne accorgi?

    Quali sono le istruzioni nel ciclo?

  6. #6
    Originariamente inviato da oregon
    Cioe'?

    Da cosa te ne accorgi?

    Quali sono le istruzioni nel ciclo?
    nel ciclo ci sono una serie di istruzioni tra cui per es:

    Codice PHP:
     percorso path
                Dim fi 
    As String() = Directory.GetFiles(percorso"*.txt")
    .......... 
    che prende in considerazione i file in una directory (per poi modificarli etc)

    ora, prende in considerazione i file presenti nella directory all'avvio del servizio, ma se poi ve ne aggiungo uno non lo modifica assolutamente (quindi non esegue continuamente le istruzioni come mi aspetto dal ciclo e come avviene se lancio un semplice form con lo stesso codice)

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' troppo poco quello che dici per darti una qualsiasi indicazione ...

    Prima di tutto dovresti indicare, con una descrizione piu' dettagliata, cosa deve fare il codice nel loop e poi mostrare una parte maggiore del codice che sta nel ciclo.

    Tieni presente che tu hai chiaro cosa devi fare nel ciclo, ma noi no ... per esempio, che intendi con "ne aggiungo uno non lo modifica ..."?

  8. #8
    Codice PHP:
    Public Sub ServiceWorkerMethod()


            
    Dim StringaDiRitorno As String
            Dim line_primo_inserimento 
    As String
            Dim line_completa 
    As String
            Dim line 
    As String

            Dim NumChiavi 
    As Integer
            Dim i 
    As Integer
            Dim percorso 
    As String
            Dim a 
    As Integer
            Dim z 
    As Integer
            Dim percorso_uno 
    As String
            Dim percorso_due 
    As String

            
            
    Do

                
    'legge la path della directory, prende tutti i file nella directory e scrive i nomi sul file INI
                           Dim fi As String() = Directory.GetFiles(Path, "*.txt")


              
                Array.Sort(fi)

                For a = 0 To fi.Length - 1
                    ScriviIni("...Configurazione.ini", "Parametri", "EnneChiave" & CStr(a), fi(a))
                Next a

                '
    scrive il numChiavi
                ScriviIni
    ("...Configurazione.ini""Parametri_Chiavi""ContatoreChiavi"1)

                
    'scrive i file di destinazione, i CSV
                For a = 0 To fi.Length - 1
                    ScriviIni("...Configurazione.ini", "Parametri_Scrittura", "MiaChiave" & CStr(a), fi(a).Replace("txt", "csv"))
                Next a

                '
    processo di modifica dei vari files
                NumChiavi 
    Val(...Configurazione.ini", "Parametri_Chiavi", "ContatoreChiavi"))

                For i = 0 To NumChiavi
                    Dim sr As StreamReader = New StreamReader(LeggiIni("
    ...Configurazione.ini", "Parametri", "EnneChiave" & CStr(i)))
                    Dim sw As StreamWriter = New StreamWriter(LeggiIni("
    ...Configurazione.ini", "Parametri_Scrittura", "MiaChiave" & CStr(i)))

                    line = sr.ReadLine()

                    While Not line Is Nothing
                        line_primo_inserimento = ""
                        line_completa = ""

                        line_primo_inserimento = line.Insert(LeggiIni("
    ...Configurazione.ini", "Posizione_Inserimento", "Primo_Inserimento"), LeggiIni("...Configurazione.ini", "Path_Inserimento", "Percorso_Prima"))
                        line_completa = line_primo_inserimento.Insert(LeggiIni("
    ...Configurazione.ini", "Posizione_Inserimento", "Secondo_Inserimento"), LeggiIni("...Configurazione.ini", "Path_Inserimento", "Estensione_Dopo"))
                        sw.WriteLine(line_completa)
                        line = sr.ReadLine()
                    End While

                    sr.Close()
                    sw.Close()

                    'scrive il nuovo percorso per i file nel file INI
                    For a = 0 To fi.Length - 1
                        ScriviIni("
    ...Configurazione.ini", "Parametri_Cartella_Destinazione", "MiaChiave" & CStr(a), fi(a).Replace("PROVA", "ARCHIVIO"))
                    Next a

                    'sposta i file da un percorso all'altro
                    percorso_due = LeggiIni("
    ...Configurazione.ini", "Parametri_Cartella_Destinazione", "MiaChiave" & CStr(i))
                    percorso_uno = LeggiIni("
    ...Configurazione.ini", "Parametri", "EnneChiave" & CStr(i))
                    File.Move(percorso_uno, percorso_due)

                Next i

            Loop

        End Sub


        'inizio del servizio
        Protected Overrides Sub OnStart(ByVal args() As String)

            Dim workerThread = New Thread(New ThreadStart(AddressOf ServiceWorkerMethod))
            workerThread.Start()

        End Sub



        Protected Overrides Sub OnStop()


        End Sub 
    Ovviamente in precedenza ho inserito le proprietà di LeggiIni e ScriviIni

    In generale il programma: guarda tutti i txt presenti in una cartella (chiamata PROVA), interagisce con il file Ini di configurazione per scrivere e recuperare i percorsi dei file, modifica le linee del testo in determinati punti, crea i .CSV (che non sono altro che i file di testo modificati) e sposta i file .txt in un'altra cartella (chiamata ARCHIVIO)

    l'ideale però sarebbe che, inserendo un file nella directory anche a processo avviato, questo venga modificato etc

    spero di essere stato un po' + chiaro..

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto e' meglio che sia

    codice:
    ...
        Dim percorso_due As String 
        Dim fi As String() 
    
        Do 
             fi = Directory.GetFiles(Path, "*.txt") 
    ...

  10. #10
    hai ragione

    cmq ritratto, ora funziona (ancor prima della modifica che mi hai suggerito)

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.