Есть 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. Вторая форма открывается не всегда, поэтому по ней вопросов точно быть не может.
Возможно 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();
//попробовать удалить файлы после этого
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте! Возможно ли сделать так что-бы операционная система не требовала установкиNET Framework и других компонентов для запуска программы...
Добрый вечерПроизвожу парсинг whois получаю данные потом их упорядочиваю на выходе получается вот это
Добавление записи я сделал, оно работает, а удаление у меня не получаетсяНадо сделать удаление методом get