Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 35
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34

    Aiuto ricorsione vb.net

    Salve a tutti, spero che qualcuno possa aiutarmi, devo fare un programma che controlla quando un file viene modificato, se viene modificato visualizza una barra verde(form verde) altrimenti faccio partire un timer impostabile allo scadere del quale verifico che non sia ancora stato modificato (il file) e visualizzo un barra rossa (red_panel).
    Il codice è questo ma non sembra funzionare la ricorsione che mi serve per controllare continuamente se il file viene modificato, posto la sub di controllo:

    Private Sub Controlla_Date()
    If date.equals(Date.Now,infoReader.LastWriteTime) Then
    Red_Pan.Visible = False
    Else
    If Red_Pan.Visible = True Then
    System.Threading.Thread.Sleep(1000)
    Else
    System.Threading.Thread.Sleep(FormSet.Timer * 60000)
    If date.equals(Date.Now,infoReader.LastWriteTime) Then
    Red_Pan.Visible = True
    End If
    End If
    End If
    Controlla_Date()
    End Sub

    Qualcuno sa darmi qualche dritta?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34
    a e la richiamo così:

    Private Sub FormBar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    FormSet.Visible = False
    Me.Visible = True
    Red_Pan.Visible = False
    infoReader = My.Computer.FileSystem.GetFileInfo("D:\RoulHistory \client_last100.txt")
    Controlla_Date()
    End Sub

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    Nel caso in esame, non penso che la ricorsione sia di aiuto: se approfondisci il concetto di ricorsione, scoprirai che ha altre finalità.

    Nel tuo caso, è sufficiente che - tramite un Timer, ad esempio - tu invochi quel metodo di controllo periodicamente, senza che questo invochi se stesso, perché non c'è motivo di farlo.

    In alternativa, se non vuoi discostarti dal tuo tipo di implementazione (dove introduci un'attesa prima di riprendere il controllo), fai un ciclo in cui richiami per un numero precisato di volte la funzione di controllo.

    Se usi la ricorsione a quel modo, nel caso in cui il file non venga modificato, esaurirai ben presto lo stack a disposizione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34
    infatti inizialmente era quello il problema....comunque adesos il problema non è lo stack ma che non funziona c'è quando lo eseguo parte subito con l'attesa, allo scadere del tempo mi visualizza la barra rossa e poi bom...sembra morto se modifichi il file non ritorna verde...come mai??

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34
    Intendi una cosa del genere?

    Public Class FormBar
    Dim ResultDate As Integer
    Dim infoReader As System.IO.FileInfo

    Private Sub FormBar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    FormSet.Visible = False
    Me.Visible = True
    Red_Pan.Visible = False
    infoReader = My.Computer.FileSystem.GetFileInfo("D:\RoulHistory \client_last100.txt")
    freq_agg.Enabled = True
    freq_agg.Start()
    End Sub

    Private Sub Controlla_Date()
    If Date.Now.Minute = infoReader.LastWriteTime.Minute Then
    Red_Pan.Visible = False
    Else
    If Red_Pan.Visible = True Then
    System.Threading.Thread.Sleep(1000)
    Else
    System.Threading.Thread.Sleep(FormSet.Timer * 60000)
    If Date.Now.Minute <> infoReader.LastWriteTime.Minute Then
    Red_Pan.Visible = True
    End If
    End If
    End If
    End Sub

    Private Sub end_of_time(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles freq_agg.Tick
    Controlla_Date()
    freq_agg.Start()
    End Sub
    End Class

    NON FUNZIONA LO STESSO....TALE E QUALE A PRIMA

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462

    Moderazione

    Originariamente inviato da Brams
    Intendi una cosa del genere?
    Formatta il codice usando il tag [CODE], come da Regolamento, altrimenti non si capisce nulla.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34
    Scusa ma mi sono appena registrato e non sapevo di questa cosa....così va bene?

    codice:
    Public Class FormBar Dim ResultDate As Integer Dim infoReader As System.IO.FileInfo  Private Sub FormBar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load FormSet.Visible = False Me.Visible = True Red_Pan.Visible = False infoReader = My.Computer.FileSystem.GetFileInfo("D:\RoulHistory\client_last100.txt") freq_agg.Enabled = True freq_agg.Start() End Sub  Private Sub Controlla_Date() If Date.Now.Minute = infoReader.LastWriteTime.Minute Then Red_Pan.Visible = False Else If Red_Pan.Visible = True Then System.Threading.Thread.Sleep(1000) Else System.Threading.Thread.Sleep(FormSet.Timer * 60000) If Date.Now.Minute <> infoReader.LastWriteTime.Minute Then Red_Pan.Visible = True End If End If End If End Sub  Private Sub end_of_time(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles freq_agg.Tick Controlla_Date() freq_agg.Start() End Sub End Class

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34
    direi di no XD aspetta ci riprovo

    codice:
    Public Class FormBar
        Dim ResultDate As Integer
        Dim infoReader As System.IO.FileInfo
    
        Private Sub FormBar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            FormSet.Visible = False
            Me.Visible = True
            Red_Pan.Visible = False
            infoReader = My.Computer.FileSystem.GetFileInfo("D:\RoulHistory\client_last100.txt")
            freq_agg.Enabled = True
            freq_agg.Start()
        End Sub
    
        Private Sub Controlla_Date()
            If Date.Now.Minute = infoReader.LastWriteTime.Minute Then
                Red_Pan.Visible = False
                Exit Sub
            Else
                If Red_Pan.Visible = True Then
                    System.Threading.Thread.Sleep(1000)
                    Exit Sub
                Else
                    System.Threading.Thread.Sleep(FormSet.Timer * 60000)
                    If Date.Now.Minute <> infoReader.LastWriteTime.Minute Then
                        Red_Pan.Visible = True
                        Exit Sub
                    End If
                End If
            End If
        End Sub
    
        Private Sub end_of_time(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles freq_agg.Tick
            Controlla_Date()
            freq_agg.Start()
        End Sub
    End Class

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    34
    Fatto, riesci a darmi qualche dritta?

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    Ci sono diverse cose dubbie nella tua implementazione.

    Innanzitutto, non è chiaro a cosa servano tutte le attese (Sleep) che hai inserito: quando si verifica la condizione del "file modificato", quella condizione deve rimanere sempre e comunque vera.

    Poi, non hai indicato come hai configurato il Timer: continui a invocare il metodo Start a ogni "tick" senza un motivo (il timer non si arresta a meno che tu non lo faccia esplicitamente).

    Infine, la logica di verifica della condizione di "modificato" è errata: per sapere se un file è stato modificato, ti basta memorizzare la sua data di ultima modifica all'avvio e periodicamente acquisire il valore aggiornato e verificare se è superiore al precedente; quando lo è, il file è stato modificato, quindi mostri la barra verde; quando invece non lo è, la barra rimane rossa.

    Il confronto dei minuti non serve, così come lo hai implementato, e non servono nemmeno le attese.

    Rivedi la logica della tua applicazione in base a queste indicazioni e poi vediamo se ci sono altri problemi di diverso tipo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.