Non è che il problema risiede semplicemente nella chiamata al metodo Dispose che potrebbe non avere un preciso effetto in questo contesto? :master:
Non è che il problema risiede semplicemente nella chiamata al metodo Dispose che potrebbe non avere un preciso effetto in questo contesto? :master:
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Ma come posso fare: Dispose mi serve perchè devo liberare dalla memoria l'immagine visualizzata in una PictureBox. Infatti l'immagine (come da codice) andrà spostata.Originariamente inviato da alka
Non è che il problema risiede semplicemente nella chiamata al metodo Dispose che potrebbe non avere un preciso effetto in questo contesto? :master:
Penso che non ci siano alternative a dispose per non incappare in un'altra eccezione
O forse non ho capito quello che mi vuoi dire![]()
Ciao
Cosa significa "andrà spostata"? Spostata dove? In che senso?Originariamente inviato da Marco Colli
Infatti l'immagine (come da codice) andrà spostata.
Ad ogni modo, siccome la proprietà a cui fai riferimento appartiene ad un controllo, è il controllo che ha la responsabilità di eseguire la Dispose sull'oggetto quando non è più necessario, altrimenti rischi di sottoporre a finalizzazione un oggetto che il controllo sfrutta per la visualizzazione, rompendo il funzionamento del controllo stesso.
Piuttosto che chiedere dove spostare la chiamata a Dispose, spiega accuratamente ciò che devi fare con quell'immagine: è possibile che Dispose non c'entri nulla, che sia un'implementazione errata o che peggio ancora provochi danni.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Ciao, effettivamente penso che il problema è proprio sulla "Dispose", in quanto l'uso della MessageBox è corretto.
Ora non si capisce bene cosa devi fare, ma sicuramete, come detto da alka, fai un uso sbagliato della Dispose..
![]()
Jupy
Scusandomi se vi rompo ancora, vi spiego al completo quello che voglio fare...Originariamente inviato da alka
Cosa significa "andrà spostata"? Spostata dove? In che senso?
Ad ogni modo, siccome la proprietà a cui fai riferimento appartiene ad un controllo, è il controllo che ha la responsabilità di eseguire la Dispose sull'oggetto quando non è più necessario, altrimenti rischi di sottoporre a finalizzazione un oggetto che il controllo sfrutta per la visualizzazione, rompendo il funzionamento del controllo stesso.
Piuttosto che chiedere dove spostare la chiamata a Dispose, spiega accuratamente ciò che devi fare con quell'immagine: è possibile che Dispose non c'entri nulla, che sia un'implementazione errata o che peggio ancora provochi danni.
Ciao!![]()
ho un form in cui è visualizzato un fileListBox, selezionando il nome di un'immagine essa viene visualizzata in un PictureBox. Questa immagine in base al tasto premuto viene spostata in una cartella, oppure eliminata (non prima di aver mostrato il famigerato MessageBox).
Per comodità vi riporto il codice completo - non siete obbligati a leggerlo
Private Sub FileListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileListBox1.SelectedIndexChanged
'percorso del file selezionato
Dim FileSelezionato As String = FileListBox1.Path & "\" & FileListBox1.FileName
'mostro la foto
Me.PictureBox1.Image = System.Drawing.Image.FromFile(FileSelezionato)
End Sub
Private Function NuovoPercorsoFile(ByVal cat As String) As String
'restituisco il nuovo percorso del file
Return FileListBox1.Path & "\" & cat & "\" & FileListBox1.FileName
End Function
Private Sub FileListBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles FileListBox1.KeyPress
'percorso del file selezionato
Dim FileSelezionato As String = FileListBox1.Path & "\" & FileListBox1.FileName
'libero le risorse: altrimenti incappo in una IOException (Il processo non può accedere al
'file perché è in uso da un altro processo.)
Me.PictureBox1.Image.Dispose()
'azioni
If e.KeyChar = "o" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("altri"))
ElseIf e.KeyChar = "w" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("bianchi"))
ElseIf e.KeyChar = "b" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("blu"))
ElseIf e.KeyChar = "y" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("gialli"))
ElseIf e.KeyChar = "r" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("rossi"))
ElseIf e.KeyChar = "g" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("verdi"))
ElseIf e.KeyChar = "v" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("violetti"))
ElseIf e.KeyChar = "x" Then
My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("scartati"))
ElseIf e.KeyChar = "d" Then
'MsgBox("Comando")
Else
'MsgBox("Comando non trovato!")
End If
'eseguo il refresh del FileListBox1
Me.FileListBox1.Refresh()
'seleziono la prima voce del FileListBox1
Me.FileListBox1.SelectedIndex = 0
End Sub
Grazie davvero![]()
A prima vista, credo che il problema sia legato al fatto che tu assegni al controllo PictureBox il riferimento ad una immagine che viene creata, tramite la classe Image, legandola al file fisico su disco.
Ciò che dovresti fare, secondo me, è invece copiare l'immagine caricata da disco all'interno di un Bitmap o una risorsa equivalente, creata in memoria, distruggendo poi il solo oggetto Image che hai utilizzato per il caricamento, assegnando il Bitmap al controllo PictureBox in modo da poter disporre dell'immagine in ogni momento chiudendo la connessione fisica al file su disco, che impiega risorse aggiuntive inutili e che deve essere utilizzato solo per il tempo necessario al caricamento dell'immagine stessa.
Inoltre, va detto che il controllo PictureBox ha una proprietà che consente di specificare direttamente il percorso da caricare, senza dover svolgere l'operazione manualmente.
Per altre informazioni, ti basta leggere la documentazione relativa all'oggetto.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Me.PictureBox1.Load(FileSelezionato)
La soluzione era semplice, così facendo non devo neanche liberare le risore!
Grazie a tutti![]()
![]()