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

    [vb2008] ai limiti della fantascienza??

    dunque, progetto composto da molti Form, uno dei quali si chiama frmLaunch e viene lanciato im modalità modale:

    frmLaunch.ShowDialog()

    in frmLaunch c' è un timer, che si attiva quando viene lanciato il form con un Timer1.Start()

    il timer controlla con un If GetAsyncKeyState(Keys.LButton) ..... la pressione del tasto sinistro del mouse, ovunque esso venga premuto sul desktop. Cou un Debug.Print controllo il risultato della elaborazione della subroutine.

    Chiudo il form con un Me.Close premendo un pulsante

    nell' evento Button_click per non sapere né leggere né scrivere ho aggiunto un

    Timer1.Enebled=false

    Nell' evento Private Sub frmLaunch_FormClosing per non sapere né leggere né scrivere ho aggiunto un

    Timer1.Enebled=false

    dopo che il form si chiude, per non saper né leggere né scrivere ho aggiunto:

    frmLaunch.ShowDialog()
    frmLaunch.Dispose()
    frmLaunch = Nothing


    Ebbene, e questa proprio non la capisco, a form chiuso quando premo il pulsante sinistro del mouse l' evento Timer disabilitato del form chiuso, disposto ed annullato continua tranquillamente a funzionare, come posso verificare nella finestra di Controllo immediato dal Debug.Print che continua a stampare come se niente fosse il risultato della elaborazione (che è praticamente l' Hwnd della finestra in cui il mouse è premuto)!!!!

  2. #2
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Ciao, prima di chiudere il form ferma il timer.. Timer1.Stop

  3. #3
    Metodo Timer.Stop: Termina la generazione dell'evento Elapsed impostando Enabled su false

    Come vedi Timer.Stop() e Timer.Enabled = False sono la stessa cosa....

    Stasera provo, alla chiusura del Form, ad impostare Interval = 0... se anche così continua vado dall' esorcista...

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Ok domanda stupida...
    Nel codice hai scritto
    Timer1.Enebled=false
    o
    Timer1.Enabled=false
    ?

    Hai provato il programma compilato e non in debug?

  5. #5
    ehm, scusa, ho provato con gli occhiali e senza, ma a me sembra la stessa identica cosa!

    forse volevi scrivere

    Timer.Enebled=false
    o
    Timer1.Enabled=false

    a cui rispondo che ho scritto Timer1.Enabled=false, anche perché in caso contrario la IDE mi avrebbe detto che il controllo Timer non c' è...

    e poi... si, ho provato anche col compilato.

    Ma la cosa che mi fa diventare scemo è che anche senza stoppare o disabilitare il Timer, quando chiudo il Form e lo setto a Nothing COMUNQUE il timer dovrebbe fermarsi.... O NO???

  6. #6
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Originariamente inviato da eziogsv
    ehm, scusa, ho provato con gli occhiali e senza, ma a me sembra la stessa identica cosa!

    forse volevi scrivere

    Timer.Enebled=false
    o
    Timer1.Enabled=false

    a cui rispondo che ho scritto Timer1.Enabled=false, anche perché in caso contrario la IDE mi avrebbe detto che il controllo Timer non c' è...

    e poi... si, ho provato anche col compilato.

    Ma la cosa che mi fa diventare scemo è che anche senza stoppare o disabilitare il Timer, quando chiudo il Form e lo setto a Nothing COMUNQUE il timer dovrebbe fermarsi.... O NO???
    Era perché nel primo esempio hai sempre scritto "Enebled"

    Cmq il timer è multi thread e quindi può fare questi scherzi (mai successo, ma evito sempre se possibile di usarlo).
    Il buon sito della MS però dice una cosa interessante.
    http://msdn.microsoft.com/en-us/libr...ing.timer.aspx
    System.Threading.Timer is a simple, lightweight timer that uses callback methods and is served by thread pool threads. It is not recommended for use with Windows Forms, because its callbacks do not occur on the user interface thread. System.Windows.Forms.Timer is a better choice for use with Windows Forms.

    che riporta
    http://msdn.microsoft.com/en-us/libr...rms.timer.aspx
    Implements a timer that raises an event at user-defined intervals. This timer is optimized for use in Windows Forms applications and must be used in a window.

    Esistono due tipi di timer.
    Prova con la seconda classe.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da eziogsv
    a cui rispondo che ho scritto Timer1.Enabled=false, anche perché in caso contrario la IDE mi avrebbe detto che il controllo Timer non c' è...
    Posta il codice sorgente effettivo, e non una "riedizione" che potrebbe nascondere l'errore.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da URANIO
    Cmq il timer è multi thread e quindi può fare questi scherzi (mai successo, ma evito sempre se possibile di usarlo).
    Il Timer "standard" comunemente inteso e implementato dal relativo componente non fa uso di altri thread, ma semplicemente indica a Windows di inviare all'applicazione un messaggio (WM_TIMER) con l'intervallo impostato che viene gestito tramite l'evento Tick.

    Per qualche motivo da determinare, il Timer non viene arrestato, ma senza il codice effettivo è ben difficile proporre una diagnosi (perché si tratta molto probabilmente di una banalità).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Originariamente inviato da URANIO Esistono due tipi di timer.
    Prova con la seconda classe.
    In realtà di Timer ce ne sono tre tipi, basati su Form, Timers e Threading.

    Pensa che non uso mai i timer di Form perché nell' Help ho sempre letto:

    Nota:
    Il componente Timer Windows Form è a thread singolo ed è limitato a una precisione di 55 millisecondi. Nel caso sia necessario un timer con multithreading più accurato, utilizzare la classe Timer nello spazio dei nomi System.Timers.


    Ho sbagliato tutto nella vita? Veramente nei progetti basati su Form è meglio non usare i Timer basati su System.Timers?? Ma che fa l' help, prende per i fondelli???????????

    Edit: leggo meglio, hai riportato il System.Threading.Timer... quello non lo uso mai.... sospiro di sollievo.

  10. #10
    [b]Per qualche motivo da determinare, il Timer non viene arrestato, ma senza il codice effettivo è ben difficile proporre una diagnosi (perché si tratta molto probabilmente di una banalità).
    beh, che il timer di un form Chiuso continui COMUNQUE a funzionare è cosa che mi lascia perplesso: anche qualora ci fosse un problema di chiusura del Timer in frmLaunch, chiudendo il Form e settandolo su Nothing dovrei comunque chiudere il suo Timer... o no?

    codice:
        Private Sub frmLaunch_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            'forzo il maledetto Timer a stoppare
            Timer1.Enabled = False
    
        End Sub
    
        Private Sub frmLaunch_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Me.Left = Screen.PrimaryScreen.Bounds.Width \ 2 - Me.Width \ 2
            Me.Top = Screen.PrimaryScreen.Bounds.Height - Me.Height - 40
            'FlagHwnd è una variabile dichiarata Pubblica a livello di Modulo       
            FlagHwnd = IntPtr.Zero
            'Timer1 è un controllo System.Timers impostato Enabled=False
            Timer1.Enabled = True
    
        End Sub
    
        Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
    
            If GetAsyncKeyState(Keys.LButton) > -1 Then Exit Sub
    
            FlagHwnd  = WindowFromPoint(Cursor.Position)
    
           'questo è il Debug.Print che mi fa capire che il timer continua a fungere
            Debug.Print("FlagHwnd da frmLaunch: " & FlagHwnd.ToString)
         
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Me.Close()
    
        End Sub
    
        Private Sub Button1_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseHover
    
            'serve ad evitare che prenda l' Hwnd del pulsante quando lo premo per chiudere
            'praticamente si aggiunge al Timer1.Enabled = False del Form_Closing
            Timer1.Stop()
    
        End Sub

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.