Задать вопрос
@Puj

Как открыть html файл через C# код?

Я хочу открыть чтобы после выполнения программы открывалась моя html страница. Я записал содержимое url ссылки в файл "thr.html" и пытаюсь его открыть. Но мне выдает ошибку, якобы файл занят другим процессом
using System;
using System.Net;
using System.Diagnostics;
namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            using (WebClient web = new WebClient())
            {
                string myUrlStr = "file:///C:/Users/zm096/Downloads/index%20(2).html";
               
                Uri uri = new Uri(myUrlStr);

                web.DownloadFileAsync(uri, "thr.html");
            }
            Process.Start(@"C:\Users\zm096\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\netcoreapp3.1\thr.html");
        }
    }
}
  • Вопрос задан
  • 1174 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 2
web.DownloadFileAsync(uri, "thr.html");
А кто авейтить асинхронные вызовы будет?

ЗЫ:
File.Copy(@"C:\Users\zm096\Downloads\index (2).html", "thr.html");
Ответ написан
@cicatrix
было бы большой ошибкой думать
Puj, Async в конце названия метода значит "асинхронный".
Происходит так:
web.DownloadFileAsync(uri, "thr.html");
Задача запускается в новом параллельном потоке, а управление возвращается в вызывающий метод.
Дальше у вас происходит выход из блока using, который "под капотом" вызывает метод Dispose() у веб-клиента.
Сборщик мусора утилизирует веб-клиента и файл, скорее всего, не скачивается.
Что делать:
1. Прочитать, как работает модель TAP (Task Await Pattern).
2. Понимать, что необходимо ожидать await завершения асинхронного метода
3. Если файлик скачать нужно только один и он небольшого размера, заменить DownloadFileAsync просто на DownloadFile. Ценой нескольких миллисекунд блокировки основного интерфейса
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы