Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
Classe accessoria con backgroundworker
Ultimo Post 01 giu 2010 10.04 by Mimmo. 4 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi

Posts:10

--
24 mag 2010 22.18  
Ciao a tutti volevo esporre il mio problema/dubbio, ho implementato un piccola applicazione per scaricare file da server ftp. Fin qui tutto bene ... l'unico dubbio è questo crearne una classe accessorai da non riscrivere ex-novo da non dover riscrivere ma per poter implementarla all'occorrenza ...
Ora ovviamente  come avevo gia' fatto usavo backgroundworker per evitare ovviamente il blocco dell'applicazione ... in primis .. peccato che poi istanziando la classe per poter poi gestire gli eventi praticamente riscrivo sempre da codice gli eventi :
  AddHandler BW.DoWork, AddressOf bw_dowork
            AddHandler BW.ProgressChanged, AddressOf bw_progressChanged
            AddHandler BW.RunWorkerCompleted, AddressOf bw_RunWorkCompleted

ma se nella classe chiamante devo rinserire questi eventi allora cosa mi server una classe accessoria ?

io volevo creare una classe dove una volta istanziata e dato i dati per la connessione lei proceda sempre allo stesso modo ...

spero di essermi spiegato .. ma mi sto confondendo visto che scrivo ancora oggi codice per vba e vb6 ... e mi sto letteralmente fondendo !

quaolcuno puo' illuminarmi ?

Grazie !

Posts:662

--
25 mag 2010 00.09  
Puoi inserire il BackGroundWorker all'interno della tua classe di gestione, istanziandolo come fosse una proprietà della classe. Per la gestione degli eventi il DoWork, se fa sempre la stessa cosa non c'è motivo che venga esposto al chiamante, l'unica cosa che deve fare il chiamante è impostare le proprietà di connessione, indicare un indirizzo ftp per l'upload, indicare il percorso del file da uplodare e richiamare un metodo della tua classe con il quale tu gli dici di avviare l'upload, che a sua volta dirà al BackGroundWorker di iniziare a lavorare. Se poi devi esporre esternamente alla tua classe le notifiche di elaborazione (percentuale di avanzamento, tempo di lavorazione trascorso e presunto, velocità di upload, ecc... eccc...) allora devi avere un evento che notifica esternamente al chiamante tutte queste informazioni.
HTH
Alberto.

Posts:10

--
25 mag 2010 18.02  
Diciamo che bene o male ho capito .. ma un piccolo esempio è possibile averlo ? 
grazie !!

Posts:29

--
01 giu 2010 09.51  
Passavo di qua per caso xD è mi è capitato di leggere il post, con permesso ti dico come in genere faccio io, ma probabilmente non è la soluzione che vuoi oppure, può darsi che io abbia capito male il tuo problema: in tal caso chiedo venia anticipatamente per post inutile.

Io invece che un BackgroundWorker con nessi e connessi, che in fin dei conti non fa nient’ altro che cercare di rendere trasparente l’ utilizzo dei thread, userei direttamente il namespace System.Threading e farei una cosa del genere:

<BR>[code]<BR><BR>using System; <BR>using System.Windows.Forms; <BR>using System.Threading; <BR><BR>public class MainForm : Form <BR>{ <BR>    Thread myThread; <BR>    TipoDato nomeVariabile; <BR><BR>    public MainForm() <BR>    { <BR>        InitializeComponent(); <BR>    } <BR><BR>    private void MainForm_Load(object sender, EventArgs e) <BR>    { <BR>        nomeVariabile = valore <BR><BR>        myThread = new Thread(delegate() { myThreadJob(nomeVariabile); }); <BR>        myThread.IsBackground = true; <BR>        myThread.Start(); <BR>    } <BR><BR>    public void myThreadJob(tipoDato nomeVariabile) <BR>    { <BR>        for (/* scegli le condizioni del ciclo */) <BR>       { <BR>            /* Qui la sequenza di istruzioni che vuoi che <BR>                vengano ripetute e che puoi eventualmente <BR>                implementare in una classe apposita */ <BR>       } <BR>    } <BR>} <BR><BR>[/code]<BR>


Naturalmente puoi lanciare più thread parallelamente e ognuno di essi eseguirà il suo compito indipendentemente dagli altri, senza freezare l’ applicazione, per il numero di volte necessario, anche while true.

Ancora, puoi avviare il tread allo scatenarsi di qualsiasi evento, come al click di un pulsante
(io nel mio esempio l’ ho avviato allo scatenarsi dell’ evento Load del Form principale, dunque parallelamente al thread principale dell’ applicazione).

Rispettosi saluti a tutti

Arrivederci

Posts:29

--
01 giu 2010 10.04  
MI scuso per doppio post, ma nel tentativo di inserire il codice del mio esempio fra i tag [code] ... [/code], avro sfruttato tutte e 3 le possibilità di modifica del post xD.

Riposto il codice dell' esempio, magari qualcuno mi spiega come inserislo come codice, per una eventuale prossima volta.

Sotto il codice di prima:

[code]

using System;
using System.Windows.Forms;
using System.Threading;

public class MainForm : Form
{
    Thread myThread;
    TipoDato nomeVariabile;

    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        nomeVariabile = valore

        myThread = new Thread(delegate() { myThreadJob(nomeVariabile); });
        myThread.IsBackground = true;
        myThread.Start();
    }

    public void myThreadJob(tipoDato nomeVariabile)
    {
        for (/* scegli le condizioni del ciclo */)
        {
        /* Qui la sequenza di istruzioni che vuoi che
            vengano ripetute e che puoi eventualmente
            implementare in una classe apposita */
        }
    }
}

[code]

... tutto qua
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
ASP.NET immagini dinamiche con HttpHandler
Costruiamo un HttpHandler per la creazione di immagini dinamiche
2007/10/24 | Autore: Rudy Azzan
Briciole di ereditarietà
Come aggiungere ulteriori funzionalità alla TreeView personalizzata
2009/06/05 | Autore: Francesca Mazzoni
SQL Server 2000/2005 Manutenzione Database
Uso di DBCC ShowContig e di sys.dm_db_index_physical_stats
2007/08/05 | Autore: Sabrina Cosolo
Visual Studio LightSwitch Beta 1 - Installazione
La procedura di installazione e le risorse sul web
2010/08/24 | Autore: Mario De Ghetto
Iniziare da zero con WPF (Parte 2)
Iniziamo a scoprire gli oggetti Application e Window
2007/09/30 | Autore: Sabrina Cosolo
Codedom Introduzione all'uso parte3
La classe Helper per le funzionalità CodeDom
2009/11/07 | Autore: Sabna Cosolo
Assembly Strong Named
Firma digitale degli Assembly, uso e funzionalità
2007/08/05 | Autore: Sabrina Cosolo
Iniziare da zero con Visual Studio
Introduzione a .NET e Visual Studio
2007/07/29 | Autore: Sabrina Cosolo
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.