Удалить файлы, загруженные в WebBrowser

241
28 февраля 2017, 14:28

Есть 3 формы. Каждая по очереди открывается, происходят определенные операции (скачивание изображений, затем их конвертация и вставка в поля webbrowser). По завершению этих операций 2 и 3 формы закрываются. Остается открыта 1 форма, т.е. главная, на которой происходит первоначальное скачивание этих файлов с помощью WebClient.

И вот при попытке удалить эти файлы (формы 2 и 3 уже закрыты), у меня ничего не получается. Они как были на диске, так и остаются. Только после закрытия программы они исчезают.

Скачивание делаю так:

WebClient webClient = new WebClient();
webClient.DownloadFileAsync(new Uri(poster), disk.Text + System.IO.Path.GetFileName("poster" + pathExtString));
webClient.Dispose();

Вставляю изображения в webbrowser так:

Populate().ContinueWith((_) => {}, TaskScheduler.FromCurrentSynchronizationContext());
async Task PopulateInputFile_poster(HtmlElement file_poster)
{
    file_poster.Focus();
    // delay the execution of SendKey to let the Choose File dialog show up
    var sendKeyTask = Task.Delay(500).ContinueWith(
        (_) =>
            {
            // this gets executed when the dialog is visible
            SendKeys.Send(disk + "" + "poster.jpg" + "{ENTER}");
            }, 
        TaskScheduler.FromCurrentSynchronizationContext()
    );
    file_poster.InvokeMember("Click"); // this shows up the dialog
    await sendKeyTask;
    // delay continuation to let the Choose File dialog hide
    await Task.Delay(500);
}

foreach (HtmlElement file_poster in elements)
{
    if (file_poster.GetAttribute("name") == "screen")
    {
        file_poster.Focus();
        await PopulateInputFile_poster(file_poster);
    }
}

Так вот, если не открывать эту третью форму, где вставляются изображения в webbrowser, то все хорошо и файлы удаляются. Но если открыть, то уже ничего не выйдет даже после закрытия самой третьей формы.

Удаляю так:

System.IO.File.Delete(disk.Text+"poster.jpg");

P.S. Вторая форма открывается не всегда, поэтому по ней вопросов точно быть не может.

Answer 1

Возможно WebBrowser сохраняет ссылку на файл. В этом случае можно попробовать перейти на другую страницу и удалить после перехода:

void DeleteFile()
{    
    needToDeleteFile = true;
    //переходим на пустую страницу
    webBrowser.Navigate("about:blank");
}
//обрабатываем событие перехода на страницу и затем удаляем файлы
void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (needToDeleteFile)
    {
        File.Delete(fileName);
        needToDeleteFile = false;
    }
}

Код взял из ответа на похожий вопрос на английском: How can i delete the file that has been navigated in a webbrowser control?

В качестве альтернативы можно попробовать явно освободить все ресурсы WebBrowser:

webBrowser.Dispose();
//попробовать удалить файлы после этого
READ ALSO
Не работает SetResolution на Bitmap

Не работает SetResolution на Bitmap

Немного не понимаю, почему не работает данный код:

250
Запуск программ

Запуск программ

Здравствуйте! Возможно ли сделать так что-бы операционная система не требовала установкиNET Framework и других компонентов для запуска программы...

243
Не удаляются пробелы из строки

Не удаляются пробелы из строки

Добрый вечерПроизвожу парсинг whois получаю данные потом их упорядочиваю на выходе получается вот это

305
Удаление записи из гостевой книги

Удаление записи из гостевой книги

Добавление записи я сделал, оно работает, а удаление у меня не получаетсяНадо сделать удаление методом get

334