1
내 코드에서 창 전화 7에 대한 API를 사용하여 skydrive에서 폴더를 가져 오려고합니다. 폴더를 가져 오는 데 listbox를 사용하고 있습니다. 폴더가 성공적으로로드되지만 UI가 중단되지만 버튼을 다시 누르면 페이지가 다시 열립니다. 은 여기 내 목록 상자처음로드 할 때 목록 상자 UI가 응답하지 않는다
<ListBox Grid.Row="1" x:Name="lbFolders"
Margin="0" SelectionChanged="lbFolders_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Border Background="#007ccf" Margin="0,0,15,4">
<Image Source="/DataHub;component/images/icon_folder.png" Width="48" Height="48" />
</Border>
<TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
이며, 여기가
VAR 스카이 드라이브 데이터
private void GetMetaDataAsyncSkyDriveCompleted(object sender, LiveOperationCompletedEventArgs e)
{
progressBar1.IsLoading = false;
if (!String.IsNullOrEmpty(e.RawResult))
{
var metaData = JsonConvert.DeserializeObject<SkyDriveFolderDataContainer>(e.RawResult);
if (metaData.data.Count > 0)
metaData.data.ForEach(x => x.Name = x.name);
if (SkyDriveHashSet == null) SkyDriveHashSet = new Dictionary<string, SkyDriveFolderDataContainer>();
if (SkyDriveHashSet.ContainsKey(TargetPath))
{
SkyDriveHashSet[TargetPath] = metaData;
}
else
{
SkyDriveHashSet.Add(TargetPath, metaData);
}
if (!HasSchemaInIt(metaData.data, TargetPath))
{
SkyDriveDisplayData.Clear();
if (metaData != null && metaData.data != null && metaData.data.Count > 0)
{
var folderList = metaData.data.Where(x => x.type == FileConstants.SkyDriveFolderKeyword && x.shared_with.access == FileConstants.SkyDriveMyFiles).ToList();
if (folderList.Any())
{
folderList.ForEach(x => x.Name = x.name.Length > 15 ? x.name.Substring(0, 12) + "..." : x.name);
folderList.ForEach(x => SkyDriveDisplayData.Add(x));
}
}
CurrentPath.Text = TargetPath;
SetVisibilityAfterGetMetaData();
}
if (App.ViewModel.SkyDriveSelectedFolderDictionary.ContainsKey(TargetPath))
SkyDriveParentFolderId = App.ViewModel.SkyDriveSelectedFolderDictionary[TargetPath];
}
else
{
MessageBox.Show(String.Format("SkyDrive replied: {0}", e.Error.Message));
}
}
내 함수 GetMetaDataAsyncSkyDriveCompleted를 async라고 부르면 비동기 객체 역 직렬화를 호출해야합니다. –
또한 창 전화 8에서 사용되지만 나는 창 전화 7 응용 프로그램에 이것을 사용하고 있습니다. –
그냥 Bcl을 설치하면 wp7에 async가 생깁니다. https://www.nuget.org/packages/Microsoft.Bcl.Async/1.0.12-beta –