Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [net] Form Pigro

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    0

    [net] Form Pigro

    Salve ragazzi.
    Ho un problema con un form che, dopo che do il comando di eseguire una operazione piuttosto pesante, mi scompare la visualizzazione del contenuto del form fino a quando il processo é finito... il problema é che sul form ho messo un bottone di "STOP" che non posso premere a causa del problema che ho appena esposto.
    Coma posso fare?
    Grazie

  2. #2
    Ciao millo,

    inserisci nella procedura la parola chiave doEvents ogni volta che devi passare il controllo al Kernel e quindi ti dia la possibilità di completare il refresh del form, ossia, leggiti quello che c'é scritto sulla guida msdn:



    Sospende l'esecuzione in modo che il sistema operativo possa elaborare altri eventi.

    Sintassi

    DoEvents( )

    Osservazioni

    La funzione DoEvents restituisce un valoreInteger corrispondente al numero di form aperti nelle versioni autonome di Visual Basic, ad esempio l’Edizione Professional. In tutte le altre applicazioni DoEvents restituisce zero.

    La funzione DoEvents trasferisce il controllo al sistema operativo, che lo conserverà fino a quando non avrà terminato di elaborare gli eventi della propria coda e fino a quando non saranno inviate tutte le sequenze di tasti della coda SendKeys.

    La funzione DoEvents è particolarmente utile per semplici operazioni come consentire all'utente di annullare un processo dopo averlo avviato, ad esempio la ricerca di un file. Per operazioni di lunga durata, è consigliabile eseguire il trasferimento del controllo al processore tramite un timer oppure delegando l'operazione a un componente EXE ActiveX. In quest'ultimo caso, l'operazione può continuare in modo totalmente indipendente dall'applicazione e il multitasking e l'assegnazione dei tempi vengono gestiti dal sistema operativo.

    Attenzione Tutte le volte che si trasferisce temporaneamente il controllo al processore all'interno di una routine di eventi, verificare che laroutine non venga di nuovo eseguita da un'altra sezione del codice prima che termini la prima chiamata. Potrebbero verificarsi, infatti, risultati imprevedibili. Non utilizzare inoltre DoEvents se, durante il periodo di tempo in cui il controllo è stato passato, è possibile che altre applicazioni interagiscano con la routine con effetti non prevedibili
    Esempio di funzione DoEvents
    In questo esempio la funzione DoEvents viene utilizzata per trasferire il controllo dell'esecuzione al sistema operativo ogni 1000 iterazioni del ciclo. DoEvents restituisce il numero di form aperti in Visual Basic, ma solo se l'applicazione host è Visual Basic.

    Esempio

    ' Crea una variabile per contenere il numero di form di
    ' Visual Basic caricati e visibili.
    Dim I, OpenForms
    For I = 1 To 150000 ' Inizio ciclo.
    If I Mod 1000 = 0 Then ' Se il ciclo è stato
    ' ripetuto 1000 volte.
    OpenForms = DoEvents ' Trasferimento al sistema operativo.
    End If
    Next I ' Incrementa il contatore di ciclo.


    Spero ti sia chiaro.

    Ciao, Fabio.

  3. #3
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    in vb.net non c'è + il DoEvents
    torvi Application.DoEvent e cmq, a seconda di quello che fai, potresti usare un thread...

    perchè non posti il codice per vedere dove sta il problema?

  4. #4
    mi scusassero... non ho visto che era vb.net, allora.... non posso aiutare nessuno. Sono ancora "vergine" di .net

    Saluti, Fabio.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    0

    sintetizzando....

    In sintesi il codice che ho utilizzato si basa solo su metodi del tipo seguente:
    __________________________________________________ _________________
    'CODICE VB.NET
    Private m_Read as StreamWriter
    Private m_Write as StreamWriter
    Private m_OutPut as ArrayList

    Public Sub OpenFile(ByVal path as string)
    m_Read = New StreamWriter(path)
    End Sub

    Public Sub CloseFile(ByVal path as string)
    m_Read.close
    End Sub

    Public WriteOutPut(ByVal path as string)
    Dim i as integer
    m_Write = New StreamWriter(path)
    For i=0 to OutPut.Count -1
    m_Write.writeline(OutPut.Item(i)
    Next
    m_Write.Flush()
    m_Write.Close
    End Sub

    Public ComputeFile(ByVal path as string)
    Dim read as string
    OutPut = New ArrayList
    Do
    read = m_Read.readline
    If read = "" Then Exit Sub
    OutPut.Add(StringModifier(read))
    Loop
    End Sub

    Public Function StringModifier (ByVal grezzo as string)as string
    Dim elaborato as string
    '..............................
    '[elaborazione stringa grezza]
    '..............................
    Return elaborato
    End Sub


    Public Sub Main()
    OpenFile(sPath)
    ComputeFile(sPath)
    CloseFile()
    WriteOutPut(sPath)
    End Sub
    'FINE CODICE VB.NET
    __________________________________________________ _________________

    Spero che tu possa aiutarmi. Spero che un esempio sia sufficente per capire. Grazie infinite

  6. #6
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    intanto prova a sostituire i loop che fai sugli streamreader con questo:

    WHILE MioStream.Read
    ...
    ...
    END WHILE


    così esce in automatico appena legge l'ultima riga ed eviti il controllo con la if..

    poi vediamo, anche perchè non è tanto chiaro il codice

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.