Как получить элемент управления WebBrowser, чтобы закрыть файл JPG? - PullRequest
2 голосов
/ 07 марта 2012

У меня есть приложение WinNet Forms .Net 4 (VS 2010), где я использую элемент управления WebBrowser для просмотра файлов .jpg на локальном жестком диске.Я открываю файл, вызывая:

this.webBrowser1.Navigate("c:\Folder1\myfile.jpg");

У меня есть кнопка, с помощью которой пользователь может щелкнуть файл, чтобы переместить файл в другую папку после его просмотра.

File.Move("c:\Folder1\myfile.jpg","c:\Folder2\myfile.jpg");

Это приводит кIOException, потому что элемент управления WebBrowser все еще имеет открытый файл.

Я попытался вызвать Navigate ("about: blank"), я попытался удалить элемент управления WebBrowser и т. Д., Но ничего не работает.Какой хороший способ заставить элемент управления WebBrowser закрыть файл jpg?

Если другого решения не найдено, я буду вынужден скопировать jpg во временную папку и использовать его для просмотра, чтобы яможет перемещать оригинал по мере необходимости.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

ОК, я обнаружил ошибку в другом разделе моего кода.У меня есть этот метод, который я вызываю в событиях Navigated и Resize элемента управления WebBrowser, чтобы увеличить масштаб, чтобы изображение соответствовало ширине элемента управления.

private void SetBrowserZoom()
    {
        if (CurrentSelectedFilePath.ToLower().EndsWith(".jpg"))
        {
            var bitMap = new System.Drawing.Bitmap(CurrentSelectedFilePath);
            decimal imageWidth = bitMap.Width;
            decimal browserWidth = WebBrowser.Width - 40;
            decimal zoomFactor = decimal.Round((browserWidth / imageWidth) * 100, 0);
            WebBrowser.Document.Images[0].Style = "zoom: " + zoomFactor.ToString() + "%";
            bitMap.Dispose();
        }
    }

Я не вызывал Dispose ()на растровом изображении, и это то, что держало файл открытым.После того, как я добавил вызов bitMap.Dispose (), проблема исчезла.

Спасибо тем, кто нашел время, чтобы выручить меня.

1 голос
/ 07 марта 2012

Если вы не привязаны к элементу управления веб-браузера, вместо этого вы можете использовать графический блок:

Перетащите PictureBox на форму и назовите ее PictureView

PictureView.Image = Bitmap.FromFile("path to the image")

Если вы ДОЛЖНЫ использовать веб-браузер, тогда вы можете скопировать изображение во временную папку и указать браузеру временную копию.

...