Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103

    C# - Consiglio su extends

    Salve a tutti,
    vorrei sapere se esiste qualcosa di analogo al

    class Ciccio extends Threads (Java)

    in C#.

    La necessità nasce dal fatto che ho creato due classi una che dovrebbe essere avviabile (e non solo ma anche terminabile etc..) tramite pressione di bottoni realizzati in un'altra classe.
    Il problema di una soluzione senza Threads e la perdita degli eventi associati alla pressione di un bottone in un momento successivo all'avvio.

    A fronte di ciò stavo pensando di usare la classe "grafica" e quella "operazioni" come due extends di Thread o al massimo estendere solamente "operazioni". (sempre in C#).

    Ma leggendo manuali e consultando velocemente internet non vi ho trovato nessuna soluzione fattibile.

    Avete dei consigli da propormi?

    Grazie e buone feste!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho spostato la discussione all'interno del forum dedicato a Visual Basic (VBx, VBA, ...) e ai linguaggi per .NET Framework (VB.NET, C#, ...).

    In futuro, poni in questo forum le domande relative a questi linguaggi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103
    Mi sono chiarito che non si può estendere una classe con un semplice extends come in Java ma bisogna porre come argomento del thread solamente un metodo della classe.

    Ora inizia la mia confusione: cosa avviare per primo?

    Avvio prima la grafica (tramite un ShowDialog() oppure Application.Run()?) e da li istanzio la classe con il thread o prima il thread e da un metodo di essa controllo la grafica aspettando un evento da parte utente?

    Ho fatto un po' di tentativi e non riesco ad avviare il tutto correttamente in nessuno dei due modi: perchè?

    Il nocciolo di tutti i problemi miei è il fatto che la seconda classe deve aggiornare la grafica e nello stesso tempo si deve poter terminare la sua esecuzione da utente (tramite la stessa grafica).

    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Io non sono ancora riuscito a capire il problema. Mi spiego: secondo me, dovresti illustrare ciò che vuoi ottenere in termini pratici nella tua applicazione e, da lì, ti verranno probabilmente spiegate varie tecniche per implementare ciò che chiedi.

    Se descrivi i passi che fai senza che sia però chiaro il traguardo, risulta difficile aiutarti.

    Peraltro, visto che prendi a modello il threading in Java, questo ambito è differente sotto molti aspetti nel .NET Framework, quindi non cercherei di riprodurre cose del primo nel secondo, benché ovviamente alcuni elementi teorici siano sicuramente validi per entrambi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103
    Sì penso che hai ragione...si semplificherebbe tutto se postassi del codice:

    la classe "leggi" controlla e lancia un menustrip (f) da cui un utente sceglie cosa fare.






    f.ShowDialog();
    do
    {
    }
    while (!f.scelta);
    f.Hide();



    Se l'utente sceglie l'opzione Per Data io vorrei lanciare un sottoapplicativo costituito da una parte grafica rappresentante una stanza (campo) ed una classe TCampo che fa interrogazioni a database e muove delle label su questo campo o meglio ricostruisce dei movimenti su di esso.
    La parte grafica è dotata oltre che dalla stanza anche dai bottoni STOP, PLAY,PAUSE con cui l'utente modifica la ricostruzione dei movimenti.

    Dal java so che se l'utente preme PLAY dopo non può più modificare l'evoluzione della ricostruzione perchè il tasto rimane premuto fino alla fine della ricostruzione per cui si era creata la necessità di separare la parte grafica da quella di "ricostruzione" ed affidare quest'ultima ad un thread in modo tale che l'utente potesse utilizzare i bottoni qualora lo volesse.

    Ecco io vorrei ricreare qualcosa di simile in C#.


    Ho realizzato la parte grafica:



    private void jTermina_Click(object sender, EventArgs e)
    {
    termina = true;
    this.Hide();
    }

    private void jPause_Click(object sender, EventArgs e)
    {
    pausa = true;
    jStop.Enabled = false;
    jPlay.Enabled = true;
    completato = true;
    }

    public void jStop_Click(object sender, EventArgs e)
    {
    jPause.Enabled = false;
    completato = true;
    sospendi = true; //ferma il ricarico della partita se è in corso
    this.Hide();
    }

    private void jPlay_Click(object sender, EventArgs e)
    {
    inizio = true;
    pausa = sospendi = false;
    this.Hide();
    }



    e la parte di ricostruzione


    private void Ricostruisci() {

    ....

    while (rs.Read() && !campo.sospendi && !campo.pausa && !campo.termina)
    {

    .....
    }

    }



    Ora mi chiedo come farle parlare.

    Ho provato a:

    *)

    All'interno di Leggi istanziare Campo (tramite c.ShowDialog() ed un'altra volta con Application.Run(c)).
    Poi ho istanziato all'interno del costruttore di Campo la classe TCampo che a sua volta istanziava il Thread (nel costruttore di TCampo)

    ....
    new Thread(Ricostruisci);

    ma non va nel senso che:

    a) non appare il campo;
    b) se appare il campo poi non posso più leggere eventuali pressioni di bottoni da parte utente.

    Cosa posso fare?
    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103
    Mi è venuta in mente un'idea pensate possa funzionare?

    Creo un thread che produce i risultati d'interrogazione settando delle variabili che con un timer le faccio leggere dalla mia classe grafica (così è anche tread-safe).

    Secondo voi ogni quanto devo tarare il timer per non perdere dati prodotti dal thread? (il database che uso è Mysql)

    Come faccio a far partire il Thread dopo aver mostrato il Form? Mi sembra di aver letto di metterlo nel metodo Show...ma come si fa?

    Così facendo eventuali pressioni di bottone da parte utente verranno rilevati o devo creare un timer che va a capire se un bottone è stato premuto?
    Grazie

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.