2017-07-03 5 views
-1

Ich nehme eine Datei und mache 2 Dinge dazu. Ändern Sie die Größe und platzieren Sie sie in einer Picturebox, ändern Sie die Größe erneut und speichern Sie sie.Der Prozess kann nicht auf die Datei zugreifen ... Weil es von einem anderen Prozess verwendet wird

Der erste Größenänderungsvorgang wird gut ausgeführt, nachdem er als Miniaturansicht in das Fenster eingefügt wurde. Nach der Größenänderung schlägt der zweite Größenänderungsvorgang fehl und sagt, dass er verwendet wird.

Von meinem Verständnis Ich schließe nicht die Datei oder den Stream. Eine Lösung hierfür ist der "using" -Befehl, aber egal, wo ich es hinstelle, ich bekomme Fehler.

Erster Resize-Code:

private void Form1_DragDrop(object sender, DragEventArgs e) 
    { 
     string[] droppedfiles = (string[])e.Data.GetData(DataFormats.FileDrop); 
     PB_Picture.Image = ScaleImage(Image.FromFile(droppedfiles[0]), 180, 140); 
    } 

Ich habe versucht:

private void Form1_DragDrop(object sender, DragEventArgs e) 
    { 
     using (string[] droppedfiles = (string[])e.Data.GetData(DataFormats.FileDrop)); 
     PB_Picture.Image = ScaleImage(Image.FromFile(droppedfiles[0]), 180, 140); 
    } 

Aber eine Reihe von Fehlern bekommen.

Errors

+0

Gut zu starten, können Sie nicht ein Array in einer 'using' Anweisung verwenden, da es IDisposable nicht implementiert. Versuchen Sie, die using-Anweisung zu entfernen. – Ingenioushax

+0

Wo ist die zweite Größenänderung? –

+0

Sie müssen das Bild, das von 'Image.FromFile' zurückgegeben wird, und nicht das String-Array ablegen. –

Antwort

0

Ohne zu wissen, wo die zweiten Neuformatierungsvorgang ist ich nicht sicher sein kann, aber dies sollte das Problem beheben.

private void Form1_DragDrop(object sender, DragEventArgs e) 
{ 
    string[] droppedfiles = (string[])e.Data.GetData(DataFormats.FileDrop); 
    using (var image = Image.FromFile(droppedfiles[0])){ 
     PB_Picture.Image = ScaleImage(image, 180, 140); 
    } 
} 
+0

Das war perfekt. Ich wusste, dass ich in der Nähe war! Vielen Dank! –

-1

Die using Aussage ist nicht korrekt:

private void Form1_DragDrop(object sender, DragEventArgs e) 
{ 
    using(string[] droppedfiles = (string[])e.Data.GetData(DataFormats.FileDrop)){ 
     PB_Picture.Image = ScaleImage(Image.FromFile(droppedfiles[0]), 180, 140); 
    } 
} 
+0

Und wie haben Ihre Änderungen geholfen? Dies wird nicht einmal aufbauen. –

Verwandte Themen