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 - ComponentModel.ProgressChangedEventArgs
Forum - C# / VB.NET - ComponentModel.ProgressChangedEventArgs

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:07
Mercoledė, 17/09/2008
Ciao totem un'altro dubbio mi affligge.

Nel mio editor di terreni

al form paint
mi deve generare una griglia di picturebox decisa dall'utente

fin quando la griglia nn supera i 30 x 30 box carica all'instante

ma se supera il 30 x 30 ci impiega qualche secondo

addirittura 1 minuto se supera i 100

infatti credevo che era crashato il programma
invece stava generando.

volevo inserire una ProgressBar

per indicare all'utente lo stato della generazione dei controlli

ho provato cosė

Codice sorgente - presumibilmente VB.NET

  1. Private Sub tiled2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs, ByVal prg As System.ComponentModel.ProgressChangedEventArgs) Handles MyBase.Load
  2.  
  3.  
  4. Dim percent = prg.ProgressPercentage
  5.  
  6.         Global.MapEditor.loading.ProgressBar1.Value = percent
  7.  
  8. end sub



non sembra voler funzionare

e mi da anche un errore dicendo che non puo gestire un evento public e ha una firma compatibile

devo rendere il paint form pubblico?

o fare qualche altro processo?

Ultima modifica effettuata da Thejuster il 17/09/2008 alle 14:45


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:03
Mercoledė, 17/09/2008
Load sottoscrive il delegate EventHandler, il quale ha sempre e solo questa signature:
Codice sorgente - presumibilmente C# / VB.NET

  1. (sender As Object, e As EventArgs)


Non puoi aggiungere, rimuovere, o cambiare parametri e, cosa pių importante, non puoi cambiare lo scopo dell'evento. Load č una procedura sincrona e non puoi trasformarla in asincrona semplicemente aggiungendo un parametro.
Non mettere mai caricamenti troppo lunghi in Form_Load, ma piuttosto usa l'evento Shown.

In questo caso, usa i thread, e in particolare il controllo BackgroundWorker:
http://totem.altervista.org/guida/versione2/C10.php

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 19:58
Mercoledė, 17/09/2008
ho letto la guida ma non ho capito come faccio a passare al backgroundworker tutti gli elementi che sta generando


mi genera delle picturebox
quindi dovrei sapere quante pic deve generare
e il tempo che ci mette per generarle tutte

nel tuo esempio ho visto passa solo come argomento la lettura di una folder.

ma vorrei capire come sapere quando ci impiega a generare tutto.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:10
Giovedė, 18/09/2008
Ma mi sembra logico che se deve generare le picturebox non devi passargliele come argomento perchč prima della sua azioni non esistono. Semmai puoi passargli il numero di controlli da generare.

Non puoi ottenere il tempo di esecuzione del metodo. E' proprio per questo che si chiama asicrono: la sua esecuzione e il tempo di elaborazione sono indeterminabili e indipendenti dal thread principali.

PM Quote