0

我可以从 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;
  }
}
4

1 回答 1

0

对于控制台应用程序,同步下载和保存文件可能更简单,例如使用WebClient.DownloadFile()

var client = new WebClient();
client.DownloadFile( sURI, sLocFname );

我不确定您的基于事件的代码出了什么问题。

我的第一个猜测是应用程序退出 Main() 并在后台下载完成之前退出。在这种情况下,您可能需要阻塞主线程,直到您的vImage_DownloadCompleted事件完成。

于 2012-12-14T15:20:57.297 回答