Oppure

Loading
18/10/12 16:12
hakzc
praticamente ho due form: form1 e form2
dal form 1 avvio un timer che fa partire il backgroundworker, e lo usa a mo' di timer, ad un certo punto backgroundworker deve aprire form2, form2 si apre ma c'è praticamente il puntatore in caricamento e così rimane, il form nemmeno si muove, soluzioni?
aaa
18/10/12 16:16
Postato originariamente da hakzc:
soluzioni?


Non so perché tu abbia messo in piedi questo accrocchio ma sicuramente, senza vedere il codice, non vedo come si possa rispondere ...
18/10/12 16:20
hakzc
Praticamente:

FORM1

TIMER1
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        BackgroundWorker3.RunWorkerAsync()
    End Sub


BACKGROUNDWORKER3
 Private Sub BackgroundWorker3_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker3.DoWork
        If dskservitore.Pending Then
            Timer1.Stop()
            Array.Resize(dskcliente, dskcliente.Length + 1) 
            dskcliente(dskcliente.Length - 1) = dskservitore.AcceptTcpClient() 
            Array.Resize(dskflusso, dskflusso.Length + 1)
            dskflusso(dskflusso.Length - 1) = dskcliente(dskcliente.Length - 1).GetStream() 
            For r = 0 To UBound(dskcliente)
                ListView1.SelectedItems(0).SubItems(6).Text = r.ToString
            Next
            controllo_schermo.Show()
            BackgroundWorker3.CancelAsync()
            BackgroundWorker3.Dispose()
            Timer2.Start()
        End If

    End Sub


DSKCLIENTE = TCPCLIENT
Riceve le connessioni, scrive l'array nella listview ed apre il form
Ultima modifica effettuata da hakzc 18/10/12 16:21
aaa
18/10/12 18:22
Ma perché il thread lo fai partire in un timer ???
19/10/12 13:18
hakzc
perchè così è a modo di timer, ma non è quello il problema, il problema è che il form si apre, ma è in continuamente in caricamento e non riesci nemmeno a muoverlo,
credo che sia qualcosa legato al thread
aaa
19/10/12 13:37
Ma cosa c'entra ?

Un thread è una cosa e un timer un'altra. Non ha senso avviare il thread da un timer.

E' sbagliata proprio l'impostazione di tutto il programma.

E non devi avviare un form all'interno di un thread che poi termina ... che senso ha?

Non te la prendere, ma si devono studiare "teoricamente" queste cose per un po' di tempo prima di scrivere codice a caso ..

19/10/12 14:07
hakzc
ok, se io faccio un nuovo progetto, con due form, form1 e form2 e voglio aprire form2 tramite backgrundworker
posto il codice:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Form2.Show()
    End Sub
End Class


il form2 rimane bloccato, se non hai capito posto un screenshot

aaa
19/10/12 14:11
Renny
Penso anche io che il problema sia legato sia legato al thread.. Perché se il caricamento del form è nel codice "do work", la sua creazione è nel blocco di codice che gestisce le connessioni, e quindi è cose se fosse in un solo thread con quelli istruzioni.
I backgroudworker servono per far eseguire del codice ripetitivo "dietro le quinte". Se in quel codice ci sono anche riferimenti ai controlli e form vari, è ovvio che il programma non gestisce separatamente "codice ripetitivo" e controlli, perché sono nello stesso flusso esecutivo.
Diverso il discorso se i form sono in un thread e il codice ripetitivo in un'altro: allora il sistema operativo sospenderà il thread del codice ripetitivo per eseguire azioni e rispondere agli eventi generati dal thread dei controlli.
Questo in soldino è quanto ho capito io.. :-|
Dico bene nessuno? :k:
aaa