Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20

Hybrid View

  1. #1
    Quote Originariamente inviata da Rickycast Visualizza il messaggio
    Ho inserito un Timer in un Form....
    Come lo hai inserito? Lo hai dichiarato da codice o "semplicemente" lo hai inserito da IDE, trascinando l' oggetto nel progetto (che mi sembra la soluzione più semplice?).

    Apri la casella degli strumenti / click destro dentro / Scegli elementi... / Componenti .NET Framework / Filtro "Timer"

    Aggiungi l' oggetto System.Timers ai controlli disponibili. Magari deseleziona il Timer di Form.

    Adesso che hai il System.Timers.Timer negli strumenti trascinalo nel progetto e doppio click dentro. Copia il codice nell' evento Timer1.Elapsed che viene generato automaticamente.

    Il Timers.Timer "dovrebbe" essere scollegato dal Thread principale.
    Ultima modifica di eziogsv; 25-10-2016 a 15:57

  2. #2
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Non ci sarei mai arrivato!! Grazie mille. Ovviamente adesso faccio le mie prove e poi, quasi sicuramente, ti chiederò ancora aiuto
    Grazie ancora.

  3. #3
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Eccomi qua eziogvs.
    Purtroppo ho l'impressione che la soluzione indicata non faccia quello che mi serve. Il Timer (che non sono comunque riuscito a far funzionare come vorrei, poi spiego) continua ad arrestarsi in corrispondenza delle operazioni più "pesanti" per riprendere recuperando il tempo perduto, praticamente come l'altro Timer.
    Ho fatto così: 1° Click destro dentro Casella Strumenti/Componenti .NET Framework/Spunta su Timer. 2° il sistema mi ha posizionato il Timer nella Casella Strumenti alla voce "Accesso". 3° ho trascinato questo timer nella Form in cui mi serve e, con doppio Click, ho generato la Private Sub Timer1.Elapsed nella quale ho messo le stesse stringhe che avevo nell'altro Timer:

    codice:
        Private S As Long
        Private M As Long
    
     Private Sub Timer1_Elapsed(sender As Object, e As Timers.ElapsedEventArgs) Handles Timer1.Elapsed
    
            Dim Secondi As String, Minuti As String, TempoTrascorso As String
    
            S = DateDiff(DateInterval.Second, DateTime.Now, Tinizio)
            M = DateDiff(DateInterval.Second, DateTime.Now, Tinizio)
    
            S += 1
            M += 1
    
            Minuti = Int(M / 60)
    
            If M > 59 Then
                S = M - Minuti * 60
            End If
    
            If S < 10 Then
                Secondi = ":0" & S
            Else
                Secondi = ":" & S
            End If
    
            If Minuti < 60 Then
                TempoTrascorso = "0" & Minuti
            Else
                TempoTrascorso = Minuti
            End If
    
            TempoImport.Text = TempoTrascorso & Secondi
    
        End Sub

    Dopo una serie di errori che sono scomparsi da soli(???) la procedura è partita ma i valori su schermo (TempoImport.Text) sono completamente diversi da quelli visualizzati dal vecchio Timer, come se quello che ho scritto fosse completamente sbagliato. Inoltre, come già detto, anche in questo caso il Timer va a singhiozzo.

  4. #4
    Il Timers.Timer è un Timer di thread, per cui "dovrebbe" essere scollegato dal Thread principale.

    Come e quando lo abiliti? Lo stoppi? Che Interval hai settato? (100 dovrebbe andare bene).

    Inizia a sostituire tutte quelle millanta righe di codice e inutili dichiarazioni di variabili con un semplice:

    codice:
    TempoImport.Text = (Now - Tinizio).Minutes.ToString("00") & ":" & _
                                                        (Now - Tinizio).Seconds.ToString("00")

    In caso di ulteriori problemi col "maledetto" timer fai quello che imho avresti dovuto fare dall' inizio, cioè inserire il codice "pesante" in un altro thread mediante BackGroundWorker in una Sub BackGroudWorker.DoWork (da lanciare con un BackGroundWorker.RunWorkerAsync).

    Così si evitano i pesanti Application.DoEvents (che in altro thread non servono) e si "libera" il thread principale.

    Non si può gestire nel BacKGroundWorker.DoWork la ProgressBar, che è dichiarata in altro thread, ma si può fare con l' apposito evento BacKGroundWorker.ReportProgress (che appartiene al thread principale).

    Nell' evento RunWorkerCompleted (che appartiene al thread principale) metterai tutto il codice di "fine lavoro".
    Ultima modifica di eziogsv; 26-10-2016 a 17:49

  5. #5
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    È abilitato di default Enabled=True. Lo avvio con Timer1.Start e lo arresto con Timer1.Stop.
    Grazie per l'istruzione in sostituzione delle mie millanta righe.
    Confermo però che visualizza il risultato nello stesso modo dell'altro Timer.
    Per completezza di dati: Timer di Form System.Windows.Forms.Timer versione 4.5.2.0 - System.Timers.Timer versione 4.0.0.0

  6. #6
    Ok, e allora "scollega" dal thread principale il codice pesante, che oltretutto oltre a "impallare" il timer dovrebbe impallare anche pulsanti & C.
    Qualche riga di codice in più, qualcosa da gestire tramite BackGroundWorker... ma codice come dovrebbe essere.
    Ultima modifica di eziogsv; 26-10-2016 a 18:07

  7. #7
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Ancora grazie. Adesso devo fermarmi e riprenderò domani mattina. Non so assolutamente nulla di BackGroundWorker e mi toccherà documentarmi. Se ti riesce, lasciami indicazioni su dove guardare per non perdere tempo inutilmente.
    P.S.: Se guardi il mio profilo capirai che oltre all'ignoranza dovuta al poco studio, c'è anche l'età di mezzo, e questo non aiuta. Ho però comprato il libro di Balena sul quale cerco di passare qualche minuto ogni giorno. Però non è che mi illumini molto,...
    A domani

  8. #8
    Beh, se è per questo io sono un vecchietto 65.nne mezzo rimbambito (i miei amici più esplicitamente dicono rincogli...).

    La fonte primaria di informazioni sul .NET è MSDN:

    https://msdn.microsoft.com/it-it/lib...or=-2147217396

    https://msdn.microsoft.com/it-it/lib...(v=vs.95).aspx

    La classe BackgroundWorker consente di eseguire un'operazione su un thread dedicato separato. Operazioni impegnative come download e le transazioni di database possono causare l'interfaccia utente (UI) sembri non rispondere durante l'esecuzione. Quando si desidera un'interfaccia utente reattiva e si vogliano evitare ritardi associati a tali operazioni, la classe BackgroundWorker costituisce la soluzione ideale.

    ed il web, dove, libri a parte, troverai millantamila miliardi di esempi per qualsiasi esigenza, aggiungendo ".NET" alla domanda, i più in C#, ma sul web ci sono diversi convertitori di codice.

    E' meno complicato di quanto sembri: trascini l' oggetto BackGroundWorker nel progetto, doppio click e crei automaticamente la Sub DoWork. Le altre Sub relative all' oggetto si creano automaticamente selezionandolo nella combobox degli oggetti inseriti nel progetto (riga in alto sotto al menu) e poi cliccando l' evento desiderato nella combobox degli eventi relativi all' oggetto selezionato.

    Buon lavoro!
    Ultima modifica di eziogsv; 26-10-2016 a 19:21

  9. #9
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    OK! grazie, adesso provo.
    Ho provato a mandarti un messaggio privato ma non ho capito se è partito e quindi se ti è arrivato.

  10. #10
    Messaggio ricevuto e ti ho risposto. Effettivamente (nota per il gestore del forum) vedo i messaggi in arrivo, ma quelli inviati no, per cui in effetti non si capisce se sono partiti o no.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.