2013-06-20 4 views
0

Я получаю сообщение об ошибке, которое говорит, что мой метод вызывается в неожиданное время. Я не знаю, почему, конечно. Я получаю его каждый раз, когда я пытаюсь вызвать этот метод.Deserializing async

public static async Task<List<Zajecia>> Deserialize() 
{ 
    var files = ApplicationData.Current.LocalFolder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByName).GetResults(); 
    var file = files.FirstOrDefault(f => f.Name == "Plan_list.xml"); 

    if (file != null) 
    { 
    using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("Plan_list.xml")) 
    { 
     XmlSerializer deserializer = new XmlSerializer(typeof(List<Zajecia>)); 
     return (List<Zajecia>)deserializer.Deserialize(stream); 
    } 
    } 
    else 
    return null; 
} 

И я звоню его таким образом

private async void Baton_Click(object sender, RoutedEventArgs e) 
{ 
    _lista = await Deserialize(); 
} 

Вот объект _lista

public sealed partial class BasicPage1 : Plan.Common.LayoutAwarePage 
{ 
    List<Zajecia> _lista = new List<Zajecia>(); 

    public BasicPage1() 
    { 
    this.InitializeComponent(); 
    this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled; 
    ... 
    } 
} 

стек вызовов:

mscorlib.dll!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
System.Runtime.WindowsRuntime.dll!System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore.AnonymousMethod__0(object o) 
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state) 
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) 
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) 
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() 
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 
[Native to Managed Transition] 

Я ищу ответы, но все еще ничего не нашли. Поэтому я прошу о помощи.

+0

Просьба показать трассировку стека. (И в идеале отредактируйте свой вопрос, чтобы исправить отступы.) –

ответ

4

Не звоните GetResults. Используйте вместо этого await:

public static async Task<List<Zajecia>> Deserialize() 
{ 
    var files = await ApplicationData.Current.LocalFolder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByName); 
    var file = files.FirstOrDefault(f => f.Name == "Plan_list.xml"); 

    if (file != null) 
    { 
    using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("Plan_list.xml")) 
    { 
     XmlSerializer deserializer = new XmlSerializer(typeof(List<Zajecia>)); 
     return (List<Zajecia>)deserializer.Deserialize(stream); 
    } 
    } 
    else 
    return null; 
} 
+0

Большое вам спасибо за быстрое и простое решение. – MajQel