Oppure

Loading
29/03/10 16:07
nala84
Ciao a tutti!!
Non riesco a far caricare un form ... Dal form principale chiamo un altro form contentente una label, una textbox ed un pulsante.. è solo grafico...

Quando vado a chiamare il Form2 si apre la finestra ma si intravede lo sfondo del desktop o la finestra appare completamente bianca...
La finestra 2 insomma non risponde...

Quale potrebbe essere il problema?
Ho letto che per risolvere questo problema basta aggiungere dopo l'istruzione form.show la seguente istruzione:
System.Windows.Forms.Application.DoEvents()

Ma nn cambia assolutamente nulla...
aaa
29/03/10 17:29
Alfonso
Ma che procedure sono eseguite quando si carica il form2?
Mi pare evidente che qualcosa ritarda o addirittura impedisce che il lancio del form2 sia portato a compimento.
aaa
31/03/10 7:39
nala84
il thread che chiama il form2 è questo:
[CODE]
Public Sub Dati()
While True
Try

Dim Bytes(Client.ReceiveBufferSize) As Byte
'Legge Client.ReceiveBufferSize bytes a partire dal primo
'dallo stream e li deposita In Bytes
'se ci sono bytes nulli, non verranno contati
'di Default, Client.ReceiveBufferSize = 8129
NetStr.Read(Bytes, 0, Client.ReceiveBufferSize)

Dim AppoggioSwitch As String
Dim mess(0) As Byte
'Trasforma i bytes ricevuti In stringa
Dim dati As String

dati = System.Text.ASCIIEncoding.ASCII.GetString(Bytes)


If SwitchDati = False Then

AppoggioSwitch = Mid(dati, 1, 1)


If SwitchDati = False Then


mess(0) = CByte(0)

Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(mess(0))
NetStr.Write(sendBytes, 0, sendBytes.Length)


End If
End If
'Visualizza il messaggio

Me.Invoke(MethodDelegateAddText, "[Ricezione dati]" & dati & vbLf & vbLf)

Me.Invoke(MethodDelegateAddText2, dati)

DatiStampa = Text2.Text

If dati.Contains("%%EOF";) Then
mess(0) = CByte(0)
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(mess(0))
Client.Close()

Dim PsStart As Long
Dim PsEOF As Long

PsStart = InStr(1, DatiStampa, "%!PS";)

PsEOF = InStr(1, DatiStampa, "%%EOF";)

DatiStampa = Mid(DatiStampa, PsStart)
Listener.Stop()

Dim fs As FileStream
fs = New FileStream("c:\test2.ps", IO.FileMode.Append)
Dim s As New StreamWriter(fs)
s.WriteLine(DatiStampa)
s.Close()

Form2.Show()
Form2.Enabled = True
Form2.Refresh()

System.Windows.Forms.Application.DoEvents()
'Form2.Show()
gsapi.ConvertFile()

System.IO.File.Delete("c:\test2.ps";)



System.Threading.Thread.Sleep(200)
DatiStampa = ""
DatiIntestazione = ""
SwitchDati = False
Listener.Start()


End If

dati = Nothing
If AppoggioSwitch = Chr(3) Then
SwitchDati = True
End If
Catch ex As Exception

End Try
End While

End Sub

[/CODE]

Il form2 per ora è solo grafico non compie nessuna operazione!!
quale può essere il problema?
aaa
31/03/10 8:27
Alfonso
Ma se metti dei punti di interruzione non riesci a capire dove si ferma?

E poi non vedo nessun comando per uscire dal loop While True.
aaa
31/03/10 8:43
nala84
Il programma non si blocca... l'unico problema è che quando arriva all'istruzione form2.show apre la form2 solo che non risponde...
però le istruzioni che seguono "form2.show" le esegue correttamente!

Secondo te come posso fare per uscire da questo ciclo infinito?!?!? :om:
aaa
31/03/10 8:57
Alfonso
Presumo che dopo

Listener.Start()

la sub Dati abbia finito il suo scopo, per cui puoi uscire con

Exit While

aaa
31/03/10 17:45
Il Totem
Il problema è molto probabilmente dovuto al ciclo. Se devi fare eseguire delle istruzioni una volta sola alla fine di un ciclo di elaborazione devi prima uscire dal ciclo, e non limitarti a mettere un if dentro ad esso. Ossia dovresti fare qualcosa del tipo:
Do While Not dati.Contains("...")
'...
Loop

Un ciclo infinito non ha senso in questo caso.
Per essere precisi, la logica del codice richiederebbe un ciclo a condizione finale:
Do

Loop While Not dati.Contains("...")
aaa