Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Creare un delay

  1. #1

    Creare un delay

    Ciao a tutti,
    ho cercato nel forum ma non sono riuscito a risolvere il mio problema. Su vb.net nel sub di un button_click ho bisogno di creare un ritardo del tipo:
    Label1.Text = "esempio"
    ritardo(3000)
    Label1.Text = "fine ritardo esempio"

    Sapreste aiutarmi???

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Puoi usare anche un Timer che non "blocca" il Thread, il forum è pieno di discussioni...
    ciao

  4. #4
    Grazie per le risposte, però:
    @vinsent ho cercato ma non ho risolto...
    @oregon ho provato lo sleep ma non funziona! O meglio, funziona solo su console quando ad esempio scrivi
    Console.WriteLine("qualcosa")
    Sleep(1000)
    Console.WriteLine("qualcosa2")

    e così funziona...ma quando provo la stessa cosa su Form non funziona. Ho provato così:

    Sub btn_onClick(ecc)
    Label.Text = "qualcosa"
    Sleep(1000)
    Label.Text = "qualcosa2"
    End Sub

    Il risultato che mi da è che aspetta i 1000 ms e poi esegue le due istruzioni e quindi ovviamente alla fine la label avrà come testo "qualcosa2", è come se leggesse l'istruzione sleep all'inizio di tutto.
    Come posso risolvere???

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Il problema penso dipenda dal fatto che Sleep blocca il thread, se lo usi su una form non la puoi neanche spostare...per questo preferisco usare il Timer...
    Comunque puoi provare così:
    codice:
    Sub btn_onClick(ecc)
    Label.Text = "qualcosa"
    
    Application.DoEvents()
    
    Sleep(1000)
    Label.Text = "qualcosa2"
    End Sub

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Modifica così il codice di Vinsent e risolvi ... (pensa che si sposta anche il form!)

    codice:
    Sub btn_onClick(ecc)
      Dim d As Integer
    
      Label.Text = "qualcosa"
    
      For d=1 to 50  
        Application.DoEvents()
        Sleep(20)
      Next d
    
      Label.Text = "qualcosa2"
    End Sub
    [/QUOTE]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Molto interessante il concetto del ciclo, lo devo tenere a mente...
    Correggimi se sbaglio, in questa maniera si riesce ad interagire con il form ma si blocca il ciclo quindi il tempo "reale" trascorso aumenta. Personalmente continuo a preferire il Timer, almeno in casi come questo.
    Scusate il semi OT...

    Comunque usando un Timer viene fuori qualcosa del genere:
    codice:
        Private Sub Button1_Click() Handles Button1.Click
            Label1.Text = "qualcosa"
            Timer1.Interval = 2000
            Timer1.Start()
        End Sub
    
        Private Sub Timer1_Tick() Handles Timer1.Tick
            Label1.Text = "qualcosa2"
            Timer1.Stop()
        End Sub

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì, ma se l'interazione è minima rispetto al ritardo (uno spostamento del form dura qualche millisecondo, rispetto a 1000 millisecondi, o più), è accettabile.

    In caso contrario, un timer o l'uso di un thread apposito, risolve il problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    scusate il ritardo...volevo ringraziare entrambi per l'aiuto! =)
    Ho visto comunque che più che nel ciclo, la riga risolutavi è stata il DoEvents!

  10. #10
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    scusate il ritardo...volevo ringraziare entrambi per l'aiuto! =)
    Prego!

    Ho visto comunque che più che nel ciclo, la riga risolutavi è stata il DoEvents!
    Prendi nota del concetto espresso nel "ciclo" di Oregon più che il DoEvents visto che il primo implica la combinazione "intelligente" di tre funzioni per "crearne" un' altra...non so se mi sono spiegato...mentre la seconda (DoEvents) basta sapere che esiste, sapere cosa fa e come usarla.
    Ciao

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.