Newsgroup: it.comp.lang.visual-basic
Titolo: vb.net Immagini JPG Loccate

Ciao a tutti,
ho un problema con il caricamento delle JPG a cui non riesco a venirne
a capo.
Devo caricare una JPG in una picture box e poi togliere il lock dal
file.
Uso questo codice:
            Dim OriginalImage As New Bitmap(FilePath) 'Carico la JPG
Originale
            Dim iImage As New Bitmap(OriginalImage) 'La copio in una
fittizzia
            OriginalImage.Dispose() 'Faccio il dispose dell'originale
            picture1.Image = iImage 'metto l'immagine temporanea nella
picture box
            iImage = Nothing
            OriginalImage = Nothing
Il tutto funziona si e no. A volte il file Originale viene sbloccato
subito, a volte dopo 10/20 secondi e a volte non viene mai sbloccato.
Ho monitorato il lock del file con FileMonitor della sysinternals.
Aiuto vi prego sto impazzendo.
Grazie

 Ho monitorato il lock del file con FileMonitor della sysinternals.
Usa un banale
picture1.Image = Image.FromFile(FilePath)
Ciao 

 - Mostra testo tra virgolette -
Grazie Fabio per la risposta.
Ma con il tuo metodo il file non viene mai chiuso e resta sempre
loccato.
Boh.......
--Marco

 loccato.
Fai cosě:
picture1.Load(ImageFile)
A quanto pare questo funziona perchč internamente anzichč il percorso usa 
uno StreamReader che carica il file e poi lo chiude.
Cioč potresti fare (non provato)
Dim reader As StreamReader = New StreamReader(ImageFile)
picture1.Image = Image.FromStream(reader.BaseStream)
reader.Close()
Ciao 

 Ciao
Ciao Fabio,
grazie per il consiglio ma provando ho notato che l'Oggetto
StreamReader non è tra quelli istanziabili. Magari fa parte di qualche
classe adesso cerco.
Grazie

 classe adesso cerco.
In che senso? Il namespace completo č System.IO.StreamReader
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 classe adesso cerco.
Era una spiegazione se vuoi essere "fine", ma ti ho detto di provare così:
picture1.Load(ImageFile)
In questo modo picture1.Image è già assegnato e il file sembra libero.
Poi, se una classe non la trovi basta cercarla con F2 o su MSND!
E poi lavorate sempre con Reflector (cerca in google) a fianco!
Ciao

 ha scritto nel messaggionews:1188494469.8...@22g2000hsm.googlegroups.com...

Ciao a tutti,
e grazie per i consigli. Ho individuato il problema.
E' in una classe per leggere e scrivere i dati exif da un'inmmagine
trovata qua:
http://www.codeproject.com/vb/net/exif_reader.asp
Succede una cosa strana. Se istanzio la classe con il nome del file
mediante la sua routine New, il tutto funzia perfettamente con l'unica
cosa che il file rimale loccato.
Se tento di caricare l'immagine con uno streamreader, oppure usare la
routine new che accetta in ingresso una bitmap, la classe mi torna
questo errore, quando cerca di accedere all'oggetto _Image istanziato
in fase di caricamento.
Non riesco a capire come mai. Sembra che nella routine New, l'oggetto
_Image sia valido, ma in qualunque altra routine mi torna questo
errore:
A first chance exception of type 'System.ArgumentException' occurred
in System.Drawing.dll
Numero:5 Descrizione: Parameter is not valid
Quindi riassumendo, usando la classe così com'è funziona ma il file
resta loccato cercando di modificarla non va. Sto impazzendo.
Grazie a tutti.
PS. uso un tool per vedere il lock sul file, e si vede proprio che lo
apre e poi non lo chiude più.
Grazie

 resta loccato cercando di modificarla non va. Sto impazzendo.
Allora sarebbe il caso che mostri 'sto cavolo di codice che usi.
Io ti ho mostrato una chiamata da una riga che non blocca un tubo e tu mi 
dici di avere errori che non si sa da dove arrivano e da cosa sono generati.
Ciao 

salve,

penso dipenda da 
http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=296&rl=1
personalmente, da quando ho implementato IDisposable nelle classi che 
gestiscono queste cose, ho risolto il problema..
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz
 
http://italy.mvps.org
DbaMgr2k ver 0.21.0 - DbaMgr ver 0.65.0 and further SQL Tools
--------- remove DMO to reply 

 - Mostra testo tra virgolette -
Ciao Fabio,
il codice è al link che avevo riportato ho evito di incollare tutto
perchè era un po lungo. Scusa.
La riga di codice che mi hai mostrato tu, blocca il file, invece con
il metodo dello stream no. Ma non so perchè nella libreria indicata
nel link non funzinonano.
Comunque grazie ai tuoi consigli sono arrivato alla soluzione
credo.................................
Andrea, la classe contiene IDisposable ma da comunque il problema di
lock in lettura.
Ho risolto credo poco elegantemente ma funziona, creando un metodo
nella classe che fa il dispose dll'immagine, da chiamare dopo la
lettura del dato.
Adesso funziona perfettamente, o almeno sembra.
Grazie a tutto per l'aiuto e i preziosi consigli
Marco

 nel link non funzinonano.
picture1.Load(ImageFile)
non blocca un accidente anche perchè il suggerimento dello stream te l'ho 
dato guardando il codice di quel metodo con Reflector.
Ciao 

 Ciao
Fabio,
non vorrei contraddirti in quanto ne sai sicuramente + di me. Ma ho
provato il codice che mi hai indicato tu monitorando il file con File
Monitor, e dopo che la JPG è caricata nella picture box, il lock sul
file non viene rilasciato. Almeno sul mio PC.
Grazie