Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB.NET] Chiusura form modale

    Salve a tutti,
    Nella mia applicazione, mentre eseguo delle operazioni voglio che mi visualizzi una finestra tipo di caricamento.
    Siccome se eseguo tutto sul thread della form principale in cui eseguo le operazioni
    (per capirci
    codice:
    Sub DoSomething
      FormLoading.ShowDialog()
      'e poi fa il resto mentre la FormLoading intrattiene il pubblico :mame: 
    End Sub
    )
    mi si blocca la FormLoading (ho provato pure a metterci Application.DoEvents(), ma niente), facevo partire un nuovo thread il quale chiamava FormLoading.ShowDialog()
    Il mio problema è che non si chiude più
    Se faccio così:
    codice:
    Sub DoSomething
     Dim AltroThread as New Threading.Thread(AddressOf ThreadMethod)
     AltroThread.Start()
      'operazioni
      FormLoading.Close()
    End Sub
    Sub ThreadMethod
     FormLoading.ShowDialog()
    End Sub
    non si chiude
    Se invece di ShowDialog() faccio semplicemente Show(), funziona ma la FormLoading si blocca, il problema secondo me è quindi il fatto che la apro come modale, esiste quindi un altro metodo per chiudere form modali da codice?
    Mi contraddico facilmente, ma lo faccio così spesso che questo fa di me una persona coerente [Caparezza]
    Se la conoscenza crea problemi, non è con l'ignoranza che li si risolve [Isaac Asimov]
    >>>Visita il mio blog<<<

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Quando devo fare questo genere di cose, il pattern che uso io è questo (pseudo c#, ma si capisce)

    codice:
    private procedura_che_fa_operaioni_lunghe(..)
    {
        BackgroundWorker bgw = new Backgroundworker();
        
        //Lavoro da fare nel thread secondario
        bgw.DoWork += (s, e) =>
        {
            //Operazioni lunghe. Occhio a non toccare elementi grafici qui.
        }
    
        //Operazioni da fare non appena si ritorna al thread principale.
        //Qui sei nel 3d principale, puoi tornare a toccare gli elementi grafici, per esempio...
        bgw.RunWorkerCompleted += (s, e) =>
        {
            Formloading.Close();
        }
    
        //Operazioni da fare subito prima di eseguire le operazioni in multithreading
        Formloading.ShowDialog();
    
        //Eseguo il bgw.
        bgw.RunWorkerAsync();
    }
    Per una completa trattazione del BGW (tipo passaggio parametri tra i due thread, e altro ancora) msdn o google sono pieni zeppi di esempi.

  3. #3
    codice:
    bgw.DoWork += (s, e) =>
        {
            //Operazioni lunghe. Occhio a non toccare elementi grafici qui.
        }
    Che sintassi è?
    Mi contraddico facilmente, ma lo faccio così spesso che questo fa di me una persona coerente [Caparezza]
    Se la conoscenza crea problemi, non è con l'ignoranza che li si risolve [Isaac Asimov]
    >>>Visita il mio blog<<<

  4. #4
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    anonymous method, lambda expression...

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.