@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");
        }
    }
}
  • Вопрос задан
  • 1000 просмотров
Решения вопроса 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
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. Ценой нескольких миллисекунд блокировки основного интерфейса
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы