Как загрузить файл с помощью элемента управления WebBrowser без использования диалогового окна «Загрузка файла»? - PullRequest
2 голосов
/ 03 апреля 2019

В проекте WPF я использую метод

webBrowser.Navigate(strUrl);

чтобы получить изображение PNG с сервера.

Появляется следующий диалог:

File Download dialog screenshot

Как я могу загрузить картинку без проблем (без диалога)?

1 Ответ

3 голосов
/ 08 апреля 2019

Вам не нужно использовать элемент управления браузера для этого.

Попробуйте использовать DownloadFileAsync ()

Вот полностью рабочий пример.(При необходимости измените пути.)

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        WebClient client = new WebClient();
        client.DownloadFileAsync(new Uri("https://www.example.com/filepath"), @"C:\Users\currentuser\Desktop\Test.png");
        client.DownloadFileCompleted += Client_DownloadFileCompleted;
        client.DownloadProgressChanged += Client_DownloadProgressChanged;
    }

    private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        progressBar.Value = e.ProgressPercentage;
        TBStatus.Text = e.ProgressPercentage + "% " + e.BytesReceived + " of " + e.TotalBytesToReceive + " received.";
    }

    private void Client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        MessageBox.Show("Download Completed");
    }

Вы можете открыть загруженный файл с помощью приложения по умолчанию, например:

System.Diagnostics.Process.Start(@"C:\Users\currentuser\Desktop\Test.png");

РЕДАКТИРОВАТЬ:

Если ваша цельпросто чтобы отобразить png, вы можете загрузить его в поток, а затем отобразить его в элементе управления изображением .

Полностью рабочий образец.

WebClient wc = new WebClient();
MemoryStream stream = new MemoryStream(wc.DownloadData("https://www.dropbox.com/s/l3maq8j3yzciedw/App%20in%205%20minutes.PNG?raw=1"));
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(stream);
bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = stream;
bi.EndInit();
image1.Source = bi;

Вотасинхронная версия.

private void Button_Click(object sender, RoutedEventArgs e)
{
    WebClient wc = new WebClient();
    wc.DownloadDataAsync(new Uri("https://www.dropbox.com/s/l3maq8j3yzciedw/App%20in%205%20minutes.PNG?raw=1"));
    wc.DownloadDataCompleted += Wc_DownloadDataCompleted;
}

private void Wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
    MemoryStream stream = new MemoryStream((byte[])e.Result);
    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(stream);
    bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    stream.Position = 0;
    BitmapImage bi = new BitmapImage();
    bi.BeginInit();
    bi.StreamSource = stream;
    bi.EndInit();
    image1.Source = bi;
}
...