Oppure

Loading
21/12/16 8:03
piter123
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

aaa
21/12/16 13:45
TheDarkJuster
E quindi? Qual'è la tua domanda? Perché lo vuoi fare? Perché non hai usato i tag code?
aaa
22/12/16 15:52
piter123
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
aaa
23/12/16 11:44
TheDarkJuster
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
aaa
25/12/16 14:00
Thejuster
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.

Public volatile int tot;

Thread prova = new Thread(test);
prova.Start();

Void test()
{

Invoke((Action)delegate {
 tot =5;
});

}



Ultima modifica effettuata da Thejuster 25/12/16 14:02
mire.forumfree.it/ - Mire Engine
C# UI Designer