PDA

View Full Version : [VB.NET] Ciclo For blocca il programma


Popo95
11-03-2015, 12:18
Salve a tutti!
Sto realizzando un semplice software che si occupa di masterizzare file e cartelle su cd/dvd. Ho problemi con il processo che si occupa di calcolare la dimensione di dati da masterizzare, ovvero:

Public Sub CalculateDataSize()
'
' Calculate the size of the files
'

Dim totalMediaSize As Long = 0
Dim mediaItem As iMediaItem


For Each mediaItem In listBoxFiles.Items
totalMediaSize += mediaItem.SizeOnDisc
Next


'Dim Dimension As Integer = CInt((totalMediaSize * 100) / _totalDiscSize)
Dim Dimension As Integer = CInt(_totalDiscSize - totalMediaSize)

Select Case Dimension
Case Is <= 600
lbl_necessary_disk.Text = "1 CD"
Case Is <= 1200 And Dimension > 600
lbl_necessary_disk.Text = "2 CD o 1 DVD"
Case Is <= 2048 And Dimension > 1200
lbl_necessary_disk.Text = "4 CD o 1 DVD"
Case Is <= 4096 And Dimension > 2048
lbl_necessary_disk.Text = "1 DVD"
End Select

If Dimension < 0 Then
MsgBox("Spazio insuffieciente")
End If

End Sub

Il problema si presenta con il ciclo "For Each mediaItem In listBoxFiles.Items". Qualsiasi cosa vene messa dopo questo ciclo, non funziona. Ho provato a mettere delle semplici MsgBox("Testo a caso") prima, dentro e dopo il ciclo. Le prime due funzionano, mentre l'ultima non viene proprio visualizzata. Anche la variabile che viene incrementata ad ogni iterazione, totalMediaSize, viene visualizzata correttamente finchè è prima o dentro il ciclo, invece dopo di esso è impossibile visualizzarla e utilizzarla.


Qualche idea su come risolvere?
Grazie in anticipo!:)

Ballantine
12-03-2015, 20:27
Ciao, hai provato a vedere se viene sollevata qualche eccezione?


...
Try
For Each mediaItem In listBoxFiles.Items
totalMediaSize += mediaItem.SizeOnDisc
Next
Catch ex As Exception
MsgBox(ex.ToString())
End Try
...

Popo95
13-03-2015, 10:06
Ok, grazie Ballantine ho provato ed effettivamente viene fuori un'eccezione. A quanto pare il ciclo si ripete in continuazione anche se non c'è più alcun "mediaItem" in "listboxfiles.Items", quindi nel momento in cui viene generata l'eccezione mi sono accordo che a "mediaItem"viene assegnato "Nothing".
Ho risolto imponendo al ciclo di uscire al verificarsi del problema, in questo modo:
For Each mediaItem In listBoxFiles.Items
If mediaItem Is Nothing Then
Exit For
End If
totalMediaSize += mediaItem.SizeOnDisc
Next

Grazie mille dell'aiuto!:)