Reputation: 13984
In a WPF project, I use the method
webBrowser.Navigate(strUrl);
to get a PNG picture from the server.
The following dialog appears:
How could I download the picture seamlessly (without a dialog)?
Upvotes: 4
Views: 3698
Reputation: 2224
You don't need to use a browser control for this.
Try using DownloadFileAsync()
Here is a fully working sample. (Change paths as needed.)
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");
}
You can open the downloaded file with the default app like this:
System.Diagnostics.Process.Start(@"C:\Users\currentuser\Desktop\Test.png");
EDIT:
If your goal is simply to display the png, you could download it to a stream, and then display it in an image control.
Fully working sample.
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;
Here is the async version.
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;
}
Upvotes: 2