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 - [vb.net] form non risponde
Forum - C# / VB.NET - [vb.net] form non risponde

Avatar
nala84 (Normal User)
Newbie


Messaggi: 13
Iscritto: 18/03/2008

Segnala al moderatore
Postato alle 18:07
Lunedì, 29/03/2010
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...

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 19:29
Lunedì, 29/03/2010
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.


che le risposte ti siano servite o meno un tuo riscontro è segno di cortesia.

http://www.alfonsonatale.altervista.org/
PM Quote
Avatar
nala84 (Normal User)
Newbie


Messaggi: 13
Iscritto: 18/03/2008

Segnala al moderatore
Postato alle 9:39
Mercoledì, 31/03/2010
il thread che chiama il form2 è questo:
Codice sorgente - presumibilmente VB.NET

  1. [CODE]
  2.  Public Sub Dati()
  3.         While True
  4.             Try
  5.  
  6.                 Dim Bytes(Client.ReceiveBufferSize) As Byte
  7.                 'Legge Client.ReceiveBufferSize bytes a partire dal primo
  8.                 'dallo stream e li deposita In Bytes
  9.                 'se ci sono bytes nulli, non verranno contati
  10.                 'di Default, Client.ReceiveBufferSize = 8129
  11.                 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize)
  12.  
  13.                 Dim AppoggioSwitch As String
  14.                 Dim mess(0) As Byte
  15.                 'Trasforma i bytes ricevuti In stringa
  16.                 Dim dati As String
  17.  
  18.                 dati = System.Text.ASCIIEncoding.ASCII.GetString(Bytes)
  19.  
  20.  
  21.                 If SwitchDati = False Then
  22.  
  23.                     AppoggioSwitch = Mid(dati, 1, 1)
  24.  
  25.  
  26.                     If SwitchDati = False Then
  27.  
  28.  
  29.                         mess(0) = CByte(0)
  30.  
  31.                         Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(mess(0))
  32.                         NetStr.Write(sendBytes, 0, sendBytes.Length)
  33.  
  34.  
  35.                     End If
  36.                 End If
  37.                 'Visualizza il messaggio
  38.  
  39.                 Me.Invoke(MethodDelegateAddText, "[Ricezione dati]" & dati & vbLf & vbLf)
  40.  
  41.                 Me.Invoke(MethodDelegateAddText2, dati)
  42.  
  43.                 DatiStampa = Text2.Text
  44.  
  45.                 If dati.Contains("%%EOF") Then
  46.                     mess(0) = CByte(0)
  47.                     Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(mess(0))
  48.                     Client.Close()
  49.  
  50.                     Dim PsStart As Long
  51.                     Dim PsEOF As Long
  52.  
  53.                     PsStart = InStr(1, DatiStampa, "%!PS")
  54.  
  55.                     PsEOF = InStr(1, DatiStampa, "%%EOF")
  56.                  
  57.                     DatiStampa = Mid(DatiStampa, PsStart)
  58.                     Listener.Stop()
  59.  
  60.                     Dim fs As FileStream
  61.                     fs = New FileStream("c:\test2.ps", IO.FileMode.Append)
  62.                     Dim s As New StreamWriter(fs)
  63.                     s.WriteLine(DatiStampa)
  64.                     s.Close()
  65.  
  66.                     Form2.Show()
  67.                     Form2.Enabled = True
  68.                     Form2.Refresh()
  69.  
  70.                     System.Windows.Forms.Application.DoEvents()
  71.                      'Form2.Show()
  72.                     gsapi.ConvertFile()
  73.  
  74.                     System.IO.File.Delete("c:\test2.ps")
  75.                    
  76.  
  77.                    
  78.                     System.Threading.Thread.Sleep(200)
  79.                     DatiStampa = ""
  80.                     DatiIntestazione = ""
  81.                     SwitchDati = False
  82.                     Listener.Start()
  83.  
  84.  
  85.                 End If
  86.  
  87.                 dati = Nothing
  88.                 If AppoggioSwitch = Chr(3) Then
  89.                     SwitchDati = True
  90.                 End If
  91.             Catch ex As Exception
  92.  
  93.             End Try
  94.         End While
  95.  
  96.     End Sub
  97.  
  98. [/CODE]



Il form2 per ora è solo grafico non compie nessuna operazione!!
quale può essere il problema?

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 10:27
Mercoledì, 31/03/2010
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.


che le risposte ti siano servite o meno un tuo riscontro è segno di cortesia.

http://www.alfonsonatale.altervista.org/
PM Quote
Avatar
nala84 (Normal User)
Newbie


Messaggi: 13
Iscritto: 18/03/2008

Segnala al moderatore
Postato alle 10:43
Mercoledì, 31/03/2010
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:

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 10:57
Mercoledì, 31/03/2010
Presumo che dopo

Listener.Start()

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

Exit While



che le risposte ti siano servite o meno un tuo riscontro è segno di cortesia.

http://www.alfonsonatale.altervista.org/
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 19:45
Mercoledì, 31/03/2010
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:
Codice sorgente - presumibilmente C# / VB.NET

  1. Do While Not dati.Contains("...")
  2. '...
  3. Loop


Un ciclo infinito non ha senso in questo caso.
Per essere precisi, la logica del codice richiederebbe un ciclo a condizione finale:
Codice sorgente - presumibilmente VB.NET

  1. Do
  2.  
  3. Loop While Not dati.Contains("...")



"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote