2013-05-01 5 views
0

У меня есть следующий код для загрузки изображения с веб-сервера:загружать и отображать изображения в ОС Windows 8

private async void Test_Click(object sender, RoutedEventArgs e) 
{ 
    HttpClient httpClient = new HttpClient(); 

    HttpRequestMessage request = new HttpRequestMessage(
     HttpMethod.Get, "http://www.reignofcomputer.com/imgdump/sample.png"); 

    HttpResponseMessage response = await httpClient.SendAsync(request, 
     HttpCompletionOption.ResponseHeadersRead); 

    var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
     "sample.png", CreationCollisionOption.ReplaceExisting); 

    var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite); 
    DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0)); 
    writer.WriteBytes(await response.Content.ReadAsByteArrayAsync()); 
    await writer.StoreAsync(); 
    writer.DetachStream(); 
    await fs.FlushAsync(); 

    displayImage(); 
} 

private void displayImage() 
{ 
    image1.Source = new BitmapImage(
     new Uri("ms-appdata:///local/sample.png", UriKind.Absolute)); 
} 

Когда я запускаю код, изображение не может отображаться, несмотря на появление в папке (в
C: \ Users \ User \ AppData \ Local \ Packages \ XXXXX \ LocalState).

Если я запускаю его снова, я получаю UnauthorizedAccessException was unhandled by user code, Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) по адресу CreateFileAsync.

Любые идеи?

+0

может быть один из тех «он включен в» ответы, но есть ли у вас права для этой папки правильно настроены? – AngryDuck

ответ

4

Вот рабочий образец приложение, которое загружает изображение и отображает его в качестве фона приложения:

http://laurencemoroney.azurewebsites.net/?p=247

async void doLoadBG() 
{ 
    System.Xml.Linq.XDocument xmlDoc = XDocument.Load(
    "http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US"); 

    IEnumerable<string> strTest = from node in xmlDoc.Descendants("url") 
     select node.Value; 

    string strURL = "http://www.bing.com" + strTest.First(); 
    Uri source = new Uri(strURL); 
    StorageFile destinationFile; 

    try 
    { 
     destinationFile = await ApplicationData.Current.LocalFolder 
      .CreateFileAsync(
       "downloadimage.jpg", CreationCollisionOption.GenerateUniqueName); 
    } 
    catch (FileNotFoundException ex) 
    { 
     return; 
    } 

    BackgroundDownloader downloader = new BackgroundDownloader(); 

    DownloadOperation download = 
     downloader.CreateDownload(source, destinationFile); 

    await download.StartAsync(); 
    ResponseInformation response = download.GetResponseInformation(); 
    Uri imageUri; 
    BitmapImage image = null; 

    if (Uri.TryCreate(destinationFile.Path, UriKind.RelativeOrAbsolute, 
     out imageUri)) 
    { 
     image = new BitmapImage(imageUri); 
    } 

    imgBrush.ImageSource = image; 
} 
1

Если вы не хотите, чтобы загрузить изображение, вы можете просто сделать это:

private void displayImage() 
{ 
    image1.Source = new BitmapImage(
     new Uri("http://www.reignofcomputer.com/imgdump/sample.png")); 
} 

ли это помощь?

+0

Образец sample.png фактически заменяется динамическим изображением, поэтому мне нужно каждый раз загружать новый. – ReignOfComputer