Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Vb2010Express - Disegnare linee con 'pausa'
Forum - C# / VB.NET - Vb2010Express - Disegnare linee con 'pausa'

Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 14:18
Venerdì, 21/12/2012
Salve,
sono agli inizi in VB2010 express e in un mio semplice programma ho un form con WindowState=Maximized e una PictureBox1 in cui con il codice:
Private Sub PICTUREBOX1_Paint(ByVal sender As Object, ByVal e As
For Me.y = 20 To 1200 Step 10
            e.Graphics.DrawLine(Pens.Red, 0, Me.y, 1050, Me.y)
            Pausa(500)
Next Me.y  
End Sub
la riempio di linee orizzontali.
Ho però la necessità di disegnare le linee una per volta con un intervallo di 1/2 secondo tra l'una e l'altra linea.
Ho inserito allora la sub:
Private Sub Pausa(ByVal DurataPausa As Integer)
        Dim OrarioFinePausa As Date = Date.Now.AddMilliseconds(DurataPausa)
        Do Until Date.Now > OrarioFinePausa
            Application.DoEvents()
        Loop
End Sub
e l'istruzione
Pausa(500)
Ma le linee vengono disegnate sempre tutte contemporaneamente e dopo un tempo che penso sia legato al Pausa(500).
Dove sbaglio? Potreste aiutarmi ?
Grazie e auguri di Buon Natale a tutto il Forum.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 15:48
Venerdì, 21/12/2012
Usa System.Threading.Thread.Sleep(n_millisecondi)

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 18:33
Venerdì, 21/12/2012
Salve,
ti ringrazio della risposta ma ti prego di darmi ancora un aiuto perchè ho provato:
- a inserire "System.Threading.Thread.Sleep(500)"  subito dopo Public Class Form1 e ottengo la
  segnalazione di errore sotto la parola System;
- a inserire l'istruzione subito dopo "e.Graphics.DrawLine(Pens.Red, 0, Me.y, 1050, Me.y)" del mio codice,
ma il risultato non cambia: le linee vengono disegnate sempre contemporaneamente e dopo un certo tempo.
Saluti

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 20:42
Sabato, 22/12/2012
Ovviamente andava invece di Pausa(500)
Comunque ho sbagliato io perchè in ogni caso in quel contesto è inutile.
Quello su cui operi (e.Graphics) è un oggetto temporaneo che andrà a essere disegnato nella PictureBox alla fine della routine, quindi con tutte le modifiche già fatte e senza intervallo
Dovresti usare l'oggetto restituito da PICTUREBOX1.CreateGraphics() invece di e.Graphics

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 6:08
Domenica, 23/12/2012
Ciao Qwertj, ancora grazie.
Devo però assentarmi e potrò provare quanto mi suggerisci solo tra qualche giorno.
Ti faro sapere.
Buon Natale

PM Quote
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Segnala al moderatore
Postato alle 14:25
Venerdì, 28/12/2012
Ciao Qwertj,
il tuo suggerimento di usare "PICTUREBOX1.CreateGraphics()" funziona perfettamente; le linee vengono disegnate una dopo l'altra in funzione del tempo di pausa fissato.
Grazie ancora.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 13:28
Domenica, 06/01/2013
Lieto di esserti stato utile :k:

PM Quote