Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    20

    [C#]Mettere in pausa il programma

    Salve a tutti.

    Avrei bisogno di aiuto per sistemare il mio programma.

    In pratica il programma fa dei controlli su delle stringhe e a seconda del verificarsi di date condizioni imposta un flag bool a false e apre un nuovo form dove l'utente effettua delle modifiche. Dopo la fine delle modifiche il flag viene impostato a true e chiude il secondo form.

    Io vorrei che il form principale si "freezzasse" fintanto che il flag è false.

    Dopo un pò di ricerche su internet ho il seguente codice dopo dell'apertura del secondo form:

    codice:
    while (flag == false)  {  Threads.Sleep(10000);  }
    Ma così all'apertura del secondo form si blocca tutto.

    Conoscete un modo migliore per fermare il programma?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    parliamo di winform e non di asp.net?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    20
    Windows Form.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    20
    Cerco di spiegare un pò meglio:

    Io ho una ArrayList di stringhe e gli analizzo una ad una per vedere se almeno una di queste ha delle specifiche caratteristiche. Se nessuna ce le ha allora una mia variabile bool, precedentemente settata, rimane true e allora il programma prosegue normalmente. Anche se solo una delle stringhe ha le queste caratteristiche la mia varibile bool viene settata a false e quindi entro in un ciclo if in cui mi apre questo secondo form dove viene letta la stringa non idonea e visualizzata su di un gridview. L'utente modifica la stringa in maniera idonea e preme il tasto che chiude il secondo form.

    Ecco, io vorrei che il programma si bloccasse subito dopo aver caricato il secondo form e che attendesse la sua chiusura o che il flag cambiasse stato.

    Quindi penso che dovrei bloccare il programma dal primo form ma farlo ripartire nel secondo quando ho finoto le operazioni, chiudo il form e il programma riparte.

    Grazie.

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    forum errato

    comunque se vuoi che non si blocchi dovresti utilizzare un thread differente per il ciclo, oppuire usare un timer.

    magari se posti più codice da te fatto ti rispondo meglio.

    edit: ok leggo meglio la tua risposta precedente che non avevo visto

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    direi che ci sono diversi modi per fare quello che vuoi, dipenda da cosa hai già scritto e come.

    uno potrebbe essere quello di notificare tramite evento o passando un istanza del primo form al secondo e chiamare da li un metodo che fa il suo dovere sul form passato.

    prova a postare il tuo codice.

    altra cosa : il primo form fa qualcosa di ciclico e indipendente dal secondo? ovvero continua a lavorare a qualcosa che tu vuoi bloccare durante l'utilizzo del secondo?

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    20
    Non riesco mai a capire dove dovrei postare. Sarà che il sotto forum VB e .Net mi crea confusione visto che non mi occupo di VB...

    Comunque ho creato un esempio esemplificativo di quello che vorrei fare:

    Ho 2 form. Entrambi con 1 textbox e 1 bottone. Si apre il primo form che il seguente codice nel button1_click:

    codice:
    private void button1_Click(object sender, EventArgs e)         
    {              
    
    Form2 frm = new Form2();              
    
    frm.Show();              
    
    // Qua io voglio che si blocchi
    
    textBox1.Text = Class1.Testo;                       
    
    }
    Si apre il secondo form. Inserisco una stringa a caso nella text box e premo il bottone che ha il seguente codice:

    codice:
    private void button1_Click(object sender, EventArgs e)        
    {             
    
    Class1.Testo = textBox1.Text;               
    
    Close();          
    
    // Qua io voglio che si sblocchi e che continui da dove l'ho bloccato
    
    }
    E quindi sbloccando continua a leggere il codice del bottone del primo form e mi compila la textbox con il valore che ho assegnato alla variabile nella classe usando la textbox del secondo form.

    In sostanza vorrei avere questa sequenza:

    - Si avvia il primo form
    - Premo il bottone
    - Carica il secondo form e si blocca
    - Scrivo qualcosa nella text box del secondo form
    - Il bottone che chiude il secondo form e fa ripartire il primo form
    - Mi compila la text box del primo form con la stringa che ho messo nel secondo form

    Spero di esser riuscito a spiegarmi.

    Grazie per l'aiuto.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    20
    Originariamente inviato da U235
    direi che ci sono diversi modi per fare quello che vuoi, dipenda da cosa hai già scritto e come.

    uno potrebbe essere quello di notificare tramite evento o passando un istanza del primo form al secondo e chiamare da li un metodo che fa il suo dovere sul form passato.

    prova a postare il tuo codice.

    altra cosa : il primo form fa qualcosa di ciclico e indipendente dal secondo? ovvero continua a lavorare a qualcosa che tu vuoi bloccare durante l'utilizzo del secondo?
    Beh nel progetto originale il primo form analizza una ArrayList di stringhe. Se ne trova alcune "strane" aggiunge l'id (perché il tutto è estratto da un db) di questi in un altro ArrayList che con una classe in qualche modo ho fatto vedere anche al secondo form. Allora se ci sono stringhe "strane" voglio che carichi il secondo form e che metta in pausa il primo in modo tale che all'apertura del secondo form mi estrae le stringhe "strane" dal db, le carica in un gridview così l'utente le può sistemare. Quando ha finito preme un bottone che esegue il mando di update sul db, chiude il secondo form ed il primo form riprendo a lavorare normalmente da dove l'ho bloccato.

    Se non trova stringhe "strane" non fa nulla. Non blocca il primo form, non carica il secondo. Semplicemente continua a lavorare.

    Si può fare?

  9. #9
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    si sei stato chiaro.

    per il forum dovrebbe essere lo stesso per vb.net e vb (Visual Basic e .Net Framework).

    io ti posso fornire una prova di concetto su come potresti fare, ma se lo vuoi adattare alle tue esigenze e non riesci ad inquadrarla dovresti postare il codice reale che hai scritto.

    codice:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace testHtmlIt
    {
        public delegate void Continua();
        public partial class Form1 : Form
        {
            public string TestoDaPassare{ get; set; }
            Continua c = null;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {            
                Thread t = new Thread(startThread);
                t.Start();
                Form2 f2 = new Form2(this);
                f2.Show();
                
            }
    
            void startThread()
            {
                while (string.IsNullOrEmpty(TestoDaPassare)) ;
                if (this.InvokeRequired)
                {
                    this.Invoke(new Continua(continua));
                }
                else continua();          
            }
    
            void continua()
            {
                this.label1.Text = TestoDaPassare;
                TestoDaPassare = null;
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace testHtmlIt
    {
        public partial class Form2 : Form
        {
            Form1 form1;
            public Form2()
            {
                InitializeComponent();
            }
    
            public Form2(Form1 form1)
            {
                InitializeComponent();
                this.form1 = form1;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                form1.TestoDaPassare = this.textBox1.Text;
                this.Close();
            }
        }
    }
    ora io non conosco le tue conoscenze, ma se c'è qualcosa che non ti è chiara domanda pure.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    20
    Ti posso postare spezzoni del codice originale. Il punto in cui voglio bloccare il programma è dentro un metodo in una classe:

    codice:
    public static void zzModificaManuale(string NomeFile)// NomeFile file passa il nome della tabella
            {
                
    
    /*Riepilogo:
    
    - Dichiarazione di variabili varie
    - Connessione al databese
    - Estrazione dei dati in un ArrayList
    - Vari cicli sulle stringhe per verificare se contengono anomalie
    - Se alcune stringhe sono anomale che aggiungo il loro ID ad un altro ArrayList (anonalie) che è leggibile anche nel secondo form*/         
    
                    if (Utility.Anomalie.Count > 0) // Penso che questo if sia inutile... 
                    {
                        Utility.ControlloTelefono = false;
                    }                               
                } // Non farci caso, è la chiusura di un ciclo che ho cancellato
    
                if (Utility.ControlloTelefono == false) // Ecco perché quel if è inutile
                {
                    Utility.NomeFile = NomeFile;
    
                    frmModificaManuale frm = new frmModificaManuale();
                    frm.Show();
                    
                    // ????????????????????????????????????????????????????????
                    // Qua voglio bloccare il programma e farlo ripartire a piacere             
                    // ????????????????????????????????????????????????????????
                }
    
            }
    Allora con il programma fermo apro il secondo form, leggo gli ID delle stringhe anomale. Le leggo, le carico nel gridview, le modifico, premo il bottone che fa aggiornare il db, chiude il secondo form e il programma continua come nulla fosse.

    Questo è il codice sul bottone:

    codice:
    private void btnFine_Click(object sender, EventArgs e)
            {
    /* Qua non c'è molto da dire:
    
    - Solite variabili
    - Leggo il gridview
    - Aggiorno i campi nel db*/
    
                MessageBox.Show("Modifica manuale completata");
    
                Utility.ControlloTelefono = true; //Penso che sia utile, lo usavo per il while ma non //funziona
    
                Close();
    
    //?????????????????????????????????????????????????????????????????????????
    //Qua io vorrei che il programma riprendesso a funzionare da dove l'ho fermato
    //????????????????????????????????????????????????????????????????????????????
            }
    Ecco tutto.

    Intanto provo il codice che mi hai scritto.

    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.