Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - form figlie e multithread
Forum - C# / VB.NET - form figlie e multithread

Avatar
piter123 (Normal User)
Pro


Messaggi: 136
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 9:03
Mercoledì, 21/12/2016
ciao, con il seguente codice apro n form figlie

For I = 1 To QtForm         '
                Dim FBattl As New FBattl                                      
                FBattl.MdiParent = FMdi                                      
                FBattl.FormBorderStyle = FormBorderStyle.SizableToolWindow    
                FBattl.Text = "  Battl. " & I & " "                          
                FBattl.StartPosition = FormStartPosition.Manual              
                FBattl.Show()
                MForm(I) = True
Next I

Avrei bisogno che ogni form fosse indipendente dal thread principale e quindi che ogni form lavorasse con un suo thread.

Grazie


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 14:45
Mercoledì, 21/12/2016
E quindi? Qual'è la tua domanda? Perché lo vuoi fare? Perché non hai usato i tag code?

PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 136
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 16:52
Giovedì, 22/12/2016
scusate, la mia domanda era riferita all'uso dei thread, stò cercando di capire come funzionano ma in realtà non riesco a farli funzionare.

ad esempio ho un timer che ogni tot secondi avvia una routine che scarica dei dati da sql da un server

Private Sub Tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TmrRealTime.Tick
        Call ScaricaSql()
End Sub

Public Sub  ScaricaSql()
        Call Scarica_Dati_Sql_RealTime()
        If FMdi.Visible = True Then
            If FMsf.Visible = True Then call Carica_Dati_Sql_in_Msf()
        End If
        Call ProgressBar_Socket()
End Sub


ora volevo rendere "autonomo" con un suo thread la routine di esecuzione del timer

Private Sub Tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TmrRealTime.Tick
       Control.CheckForIllegalCrossThreadCalls = False
        Dim T As System.Threading.Thread
        T = New Threading.Thread(AddressOf  ScaricaSql)
        T.Start()
End Sub

Public Sub  ScaricaSql()
        Call Scarica_Dati_Sql_RealTime()
        If FMdi.Visible = True Then
            If FMsf.Visible = True Then call Carica_Dati_Sql_in_Msf()
        End If
        Call ProgressBar_Socket()
End Sub

Succede che si crea un suo thread ma sulla routine  ScaricaSql alla riga  If FMdi.Visible = True Then anche se la form FMdi è visibile non esegue l'istruzione, ovviamente sbaglio io in qualcosa. Gentilmente mi illuminate, grazie

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 12:44
Venerdì, 23/12/2016
Ok, puoi adottare due approcci:
il primo: all'interno della stessa app hai due thread che si scambiano messaggi usando una qualche struttura apposita
il secondo: hai due applicazioni, o una applicazione e un servizio, e il servizio invia dati all'applicazione per mezzo dei socket

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:00
Domenica, 25/12/2016
I form dell'applicazione corrente appartengono allo stesso thread.
Non poi lanciare un nuovo form su un thread deferente.

Ma utilizzare applicazioni differenti e sfruttare il mutex per la comunicazione.
O un semplice socket.

I thread non possono gestire i form.
Ma prototipi di funzioni ed in seguito richiamare variabili o metodi
Definiti come volatile.

Codice sorgente - presumibilmente C++

  1. Public volatile int tot;
  2.  
  3. Thread prova = new Thread(test);
  4. prova.Start();
  5.  
  6. Void test()
  7. {
  8.  
  9. Invoke((Action)delegate {
  10.  tot =5;
  11. });
  12.  
  13. }




Ultima modifica effettuata da Thejuster il 25/12/2016 alle 15:02


PM Quote