[英]C# Console app - Bing Maps - how to save output
我可以從Bing Maps獲取URI,但是當我嘗試保存生成的文件(例如.jpg)時,它是空的(例如1 x 1大小)。 我已經在帶有事件處理的WPF應用程序中很好地工作了,但是如何通過控制台應用程序來實現呢?
這是與WPF一起使用的代碼,但是在控制台應用程序中相同的代碼失敗-我認為這一定是因為文件保存在事件處理程序中,而且(據我所知)您不能在控制台應用程序中執行此操作。
public void vSaveBitmapImage(string sURI, // created with Bing Maps GeocodeServices
string sLocFname)
{
// save file name so event handler knows it
this.sFname = sLocFname;
try
{
BitmapImage bmpImage = new BitmapImage(new Uri(sURI, UriKind.RelativeOrAbsolute));
// setup event handler - file is saved just fine here
bmpImage.DownloadCompleted += vImage_DownloadCompleted;
}
catch (SystemException sex)
{
string s = sex.Message;
}
}
/// <summary>
/// handle the event that an image download has completed
/// </summary>
private void vImage_DownloadCompleted(object sender,
EventArgs e)
{
try
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create((BitmapImage)sender));
using (var filestream = new FileStream(this.sFname, FileMode.Create))
encoder.Save(filestream);
}
catch (SystemException sex)
{
string s = sex.Message;
}
}
對於控制台應用程序,同步下載和保存文件可能更簡單,例如使用WebClient.DownloadFile() 。
var client = new WebClient();
client.DownloadFile( sURI, sLocFname );
我不確定您的基於事件的代碼出了什么問題。
我的第一個猜測是該應用程序退出Main()並在后台下載完成之前退出。 在這種情況下,您可能需要阻塞主線程,直到完成vImage_DownloadCompleted
事件為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.