2013-07-05 53 views
0

我正在開發一款WinRT應用程序,該應用程序是本地網絡可玩遊戲。我可以在應用程序中讀取用戶的DisplayName和AccountPicture,並通過xaml在本地顯示給用戶。我使用下面的代碼來獲取帳戶圖片成的BitmapImage的XAML頁面中綁定:在本地網絡遊戲中與WinRT中的其他人共享本地用戶的個人資料圖片

private async Task<BitmapImage> GetDisplayImage() 
    { 
     BitmapImage image = null; 

     if (CoreApplication.MainView != null) 
     { 
      await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
       CoreDispatcherPriority.Normal, async() => 
       { 
        var stream = await Windows.System.UserProfile.UserInformation.GetAccountPicture(Windows.System.UserProfile.AccountPictureKind.LargeImage).OpenReadAsync(); 
        image = new BitmapImage(); 
        image.SetSource(stream); 
       }); 
     } 
     return image; 
    } 

我認爲這將有可能讀取流成字節數組,出貨時,應用程序連接到其他人,然後重構在另一端的字節數組像這樣:

public static async Task<byte[]> ToArray(this IRandomAccessStream stream) 
    { 
     IBuffer buffer = new Windows.Storage.Streams.Buffer((uint)stream.Size); 
     await stream.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.ReadAhead); 
     await stream.FlushAsync(); 
     return buffer.ToArray(); 
    } 

然而,就行:

await stream.FlushAsync(); 

我接收UnauthorizedAccessExce ption:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

必須能夠與他人分享的個人檔案相片,因爲我看到了它在其他地方完成的,但我似乎無法找到如何做到這一點的任何信息。如果任何人都可以在這個方向上指出我的正確方向(我想知道是否有一個不同的api需要插入,或者如果我需要在應用程序清單中設置某些東西..),我會非常感激。

回答

0

你可以直接閱讀GetAccountPicture返回IStorageFile

var file = UserInformation.GetAccountPicture(AccountPictureKind.LargeImage); 
var buffer = await FileIO.ReadBufferAsync(file); 
var bytes = buffer.ToArray(); 
+0

感謝您的答覆,與你發佈的代碼,應用程序只是掛就行了:VAR緩衝=等待FileIO.ReadBufferAsync(文件); AccountPicture文件有什麼特別之處嗎? –

+0

我說得太快了,我有一個不同的線程正在運行一些測試,導致了死鎖,你的代碼運行得很完美。謝謝! –

相關問題