0

Bing Maps에서 URI를 가져올 수 있지만 결과 파일 (예 : .jpg)을 저장하려고하면 URI가 비어 있습니다 (예 : 1 x 1 크기). 이벤트 처리 기능이있는 WPF 응용 프로그램에서 제대로 작동하지만 콘솔 응용 프로그램에서 어떻게 처리합니까?C# Console app - Bing Maps - 출력을 저장하는 방법

여기 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

당신은 당신의 시스템을 "섹스 (sex)"라고 불렀다는 점에서 미숙하게 웃었다. –

+0

그래, 그거 유감이야. 1 년 전에 그걸로 다가왔다.) –

답변

0

콘솔 응용 프로그램의 경우 파일을 동시에 다운로드하여 저장하는 것이 더 간단 할 수 있습니다. WebClient.DownloadFile().

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

이벤트 기반 코드에 어떤 문제가 있는지 잘 모르겠습니다.

내 첫 번째 추측은 응용 프로그램이 Main()에서 빠져 나와 백그라운드 다운로드가 완료되기 전에 종료된다는 것입니다. 이 경우 vImage_DownloadCompleted 이벤트가 완료 될 때까지 주 스레드를 차단해야 할 수 있습니다.

+0

고마워요! WebClient - 좋습니다. Btw, 나는 행운과 함께 이벤트를 기다리기 위해 Console.Readline()을 사용하여 main()을 매달려고했다. 콘솔 앱 및 이벤트 처리 방법을 연구해야합니다. –