Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB2008] timer che blocca un button??

    non so se riesco a spiegarmi bene... immaginate una routine che, premendo un button, sostanzialmente pone in primo piano una certa finestra

    Private Sub Button1_Click(ByVal sender As System.Object, .... ecc ecc )

    Debug.Print("ok passato")
    Me.Timer1.Stop()

    SetForegroundWindow(hWnd)

    Me.Timer1.Start()

    End Sub

    il codice prima blocca una routine gestita dal timer (appunto trovare l' hWnd di certe finestre) e poi fa ripartire il timer

    il problema è che la routine funge 9 volte su 10... 1 su 10 no!

    allora per prova ho inserito il codice

    Debug.Print("ok passato")

    ed effettivamente, per quanto sembri incredibile, quando la routine non funziona il codice non viene effettivamente letto... cioè premo il tasto ma il blocco Button1_click non viene eseguito!!

    non capisco, può dipendere dal timer??

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Non capisco cosa serva stoppare il Timer nell'evento _Click quando se sta eseguendo la routine di quell'evento non può di certo anche eseguire quella del Timer. Non capisco.
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    attenzione che il timer NON è un thread separato, quindi o funzione o timer nello stesso momento

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Appunto, quindi che senso a stoppare il Timer e poi farlo ripartire nella stessa routine?
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    stoppo il timer per sicurezza: scatta ogni 500 millisecondi, se quando premo il button prima di eseguire SetForegroundWindow(hWnd) quello proprio perché è arrivato al 500.mo millisecondo mi cambia l' hWnd, posso correre il rischio di attivare un altra finestra... o no?

    cioè, il timer non scorre sempre e comunque, qualsiasi routine in quel mentre sia in esecuzione?

    cioè, se eseguissi una routine che impiega 10 secondi a terminare, se ho un timer settato a un secondo che mi fa comparire una finestrella che dice "ciao", la finestrella non comparirebbe 10 volte in quei 10 secondi?

    EDIT:
    ho tolto il timer.stop e timer.start... nulla cambia

    circa una volta su 10, pur premendo il button, la routine NON viene letta ed il codice SetForegroundWindow(hWnd) non viene eseguito

    incredibile... l' unica possibilità che mi viene in mente è, appunto, che esattamente in quello stesso istante scatti l' evento timer che in qualche modo svii il codice dall' evento button_click... non vedo altra spiegazione... o no??

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Questo se parliano di un applicazione a thread singolo.

    stoppo il timer per sicurezza: scatta ogni 500 millisecondi, se quando premo il button prima di eseguire SetForegroundWindow(hWnd) quello proprio perché è arrivato al 500.mo millisecondo mi cambia l' hWnd, posso correre il rischio di attivare un altra finestra... o no?
    No, quando si avvia l'evento del Button_Click sicuramente la routine del Timer è terminata e questa non può ricominciare fino a che la ruotine dell'evento non termina.

    cioè, il timer non scorre sempre e comunque, qualsiasi routine in quel mentre sia in esecuzione?
    No.

    cioè, se eseguissi una routine che impiega 10 secondi a terminare, se ho un timer settato a un secondo che mi fa comparire una finestrella che dice "ciao", la finestrella non comparirebbe 10 volte in quei 10 secondi?
    No, comparirebbe ogni 10 secondi.

    ho tolto il timer.stop e timer.start... nulla cambia
    Infatti non avevamo detto che il problema era quello, ma che era probabilmente inutile stoppare il Timer.

    incredibile... l' unica possibilità che mi viene in mente è, appunto, che esattamente in quello stesso istante scatti l' evento timer che in qualche modo svii il codice dall' evento button_click... non vedo altra spiegazione... o no??
    Se l'evento del Button parte lo deve per forza terminare anche se, in un'applicazione multithread, si dovesse avviare il timer.
    Sbagliare è umano, perseverare è diabolico.

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.