Newsgroup: it.comp.lang.visual-basic
Titolo: Eliminazione file

Ciao,
nel mio programma sviluppato con visual studio 2010, prendo un file jpg e lo inoltro via mail.
dopo l'invio dovrei eliminarlo ma ho un errore in quanto mi dice che il file è utilizzato in un processo e non può essere eliminato...
 
il nome e percorso file è in txtMemoSelezione.Text
prima di eseguire il kill svuoto le listbox che lo mostrano e svuoto la picturebox che ne fa vedere l'anteprima
 
di seguito il codice di invio mail 
 
Private Sub btnInvioMail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInvioMail.Click
 
        Dim outlookMessage As Outlook.MailItem
        Dim appOutlook As New Outlook.Application
 
        Try
 
            outlookMessage = appOutlook.CreateItem(Outlook.OlItemType.olMailItem)
 
            Dim recipients As Outlook.Recipients = outlookMessage.Recipients
 
            recipients.Add("
xx...@xxx.com
") 'Mail del destinatario
            outlookMessage.Subject = "Oggetto"
            outlookMessage.Body = "Testo"
            outlookMessage.Attachments.Add(txtMemoSelezione.Text)
            outlookMessage.BodyFormat = Outlook.OlBodyFormat.olFormatHTML
            outlookMessage.Send()
 
            MessageBox.Show("La segnalazione è stata inviata correttamente...", "Invio mail", MessageBoxButtons.OK, MessageBoxIcon.Information)
 
            'Sposto il file nella cartella "Visti"
            Dim sFile As String = txtMemoSelezione.Text
            Dim dFile As String = "Percorso\" & txtMemoSelezione2.Text
 
            FileCopy(sFile, dFile)
 
            'Azzero tutto ed elimino il file dalla cartella "Da vedere"
            lbNuove.Items.Clear()   'Listbox con elenco file 
            lbVecchie.Items.Clear() 'Listbox con elenco file 
            lbNuove.Visible = False
            lbVecchie.Visible = False
            btnInvioMail.Visible = False
            pbRichiestaSelezionata.Image = Nothing
            lblAnteprima.Text = ""
 
            outlookMessage = Nothing
            appOutlook = Nothing
 
            Kill(txtMemoSelezione.Text)
            txtMemoSelezione.Text = ""
            txtMemoSelezione2.Text = ""
 
        Catch ex As Exception
            MessageBox.Show("Mail non inviata!" & vbNewLine & vbNewLine & ex.Message, "Invio mail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Finally
            outlookMessage = Nothing
            appOutlook = Nothing
        End Try
 
    End Sub


Ho provato anche con Move e ho fatto l'operazione di spostamento prima di inviare la mail ma nulla da fare! 
Come memorizzo il file senza impegnare il processo?

 Come memorizzo il file senza impegnare il processo?
 
Dipende come lo hai usato quel file, il codice qui sopra ne fa vedere solo una parte.
Potrebbe essere tenuto ancora impegnato da Outlook, per esempio, nonostante tu abbia fatto i Nothing del caso... hai controllato nel Task Manager se il processo è chiuso quando hai l'eccezione?
Potrebbe essere impegnato da un altra parte del codice, tipo quello che usi per l'anteprima a cui fai cenno... hai fatto tutti i .Dispose degli oggetti grafici?


In realtà, credo che l'impegno del processo sia dovuto al fatto che, quando seleziono una voce dalla listbox (popolata dai file nella cartella), ho un controllo picturebox che mostra l'immagine.
Se non faccio mostrare l'immagine funziona...
 
sto provando a gestire il codice su Click della listbox in questo modo:
 
Private Sub lbNuove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbNuove.Click
 
        txtMemoSelezione.Text = "J:\Folitec\DB Da SQL Server\Ricette macine\Segnalazioni variazioni\Da vedere\" & lbNuove.SelectedItem.ToString
        txtMemoSelezione2.Text = lbNuove.SelectedItem.ToString
 
        Using img As Image = Image.FromFile(txtMemoSelezione.Text)
            pbRichiestaSelezionata.Image = img
            'pbRichiestaSelezionata.Image = Image.FromFile(txtMemoSelezione.Text)
            lblAnteprima.Text = "Anteprima richiesta variazione ricetta"
            btnInvioMail.Visible = True
        End Using
 
    End Sub
 
con Using non compare l'anteprima nella picturebox quindi mi permette di eliminarlo ma non vedo l'immagine
spero di essermi spiegato
Marco

Il giorno martedì 13 giugno 2017 14:33:34 UTC+2, Luca D ha scritto:

Credo di aver risolto! 
Spostavo il file prima di scaricarlo dalla picturebox!
ora ho messo:
picturebox.image.dispose
poi FileCopy e kill
 
sembra funzionare tutto, grazie per il supporto!!!!
grazie per l'aiuto
Marco