0

我可以從Bing地圖獲取URI,但是當我嘗試保存生成的文件(例如.jpg)時,它是空的(例如1 x 1大小)。我已經在事件處理的WPF應用程序中正常工作,但是如何使用控制檯應用程序執行此操作?C#控制檯應用程序 - Bing地圖 - 如何保存輸出

下面是與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; 
    } 
} 
+0

顯示您的代碼。 –

+0

在你稱之爲系統異常「性」時不成熟地笑了起來。 –

+0

是的,對不起 - 那是一年前遇到過的並且一直在使用它) –

回答

0

對於控制檯應用程序,可能更容易同步下載和保存文件,例如,與WebClient.DownloadFile()

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

我不確定基於事件的代碼出了什麼問題。

我的第一個猜測是應用程序退出Main()並在後臺下載完成之前退出。在這種情況下,您可能需要阻止主線程,直到您的vImage_DownloadCompleted事件完成。

+0

謝謝! WebClient - 很好。順便說一句,我試着用一個Console.Readline()掛起main()來等待事件,沒有運氣。 '必須研究控制檯應用程序和事件處理。 –

相關問題