2012-11-25 48 views
5

Tôi đang xây dựng một ứng dụng Windows 8 và đã đưa ra những ngoại lệ sau đây:ngoại lệ khi gọi SuspensionManager.SaveAsync()

SuspensionManager thất bại

Khi chạy đoạn mã sau:

private async void OnSuspending(object sender, SuspendingEventArgs e) 
{ 
    var deferral = e.SuspendingOperation.GetDeferral(); 
    await SuspensionManager.SaveAsync(); 
    deferral.Complete(); 
} 

Trường hợp ngoại lệ xảy ra trên dòng thứ ba của phương thức và không thực sự cung cấp bất kỳ chi tiết nào.

Tôi đã không tìm thấy bất kỳ điều gì hữu ích về việc này trên mạng. Có ai thấy điều này trước đây không?

// EDIT

này có thể liên quan đến một thực tế tôi đang sử dụng một biến dynamic kiểu cho Windows 8 Facebook SDK.

Có phải dynamic biến không được phép không?

// EDIT 2

Dưới đây là cách sử dụng của biến dynamic:

dynamic result = await FB.GetTaskAsync("fql", parameters); 
if (result.data.Count > 0) 
{ 
    return result.data[0].src_big as string; 
} 

và các cuộc gọi stack cho các ngoại lệ:

mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task task) + 0x5e bytes 
mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task) + 0x35 bytes 
mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.GetResult() + 0x16 bytes 
FacebookRandomizer.exe!FacebookRandomizer.App.OnSuspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e) Line 86 + 0xa5 bytes C# 
[Native to Managed Transition] 

ba đầu tiên là mã bên ngoài, và thứ tư là phương thức của tôi trong App.xaml.cs.

Trả lời

2

Tìm thấy câu trả lời và điều này hoàn toàn không liên quan đến Facebook-sdk.

Tôi đã lưu hình ảnh bitmap trong pageState khi tạm ngừng và dường như điều này không hoạt động.

Dưới đây là các mã cũ:

BitmapImage img = RandomImage.ImageSource as BitmapImage; 
pageState["currentImage"] = img; 

và mới:

BitmapImage img = RandomImage.ImageSource as BitmapImage; 
Uri uriSource = img.UriSource; 
pageState["currentImage"] = uriSource; 
1

tôi đã có thể làm việc này bằng cách đảm bảo tôi có các loại serializable (trong trường hợp của tôi nó là lớp viewmodel đơn giản). sau đó trong công cụ xây dựng App của tôi trong dự án Shared, đảm bảo rằng SuspensionManager biết về các loại của tôi. Chuẩn serializers tích hợp chuẩn đã thực hiện công việc của họ và tôi đã hoàn thành công việc.

public App() { 
     // ... existing code ... 
     SuspensionManager.KnownTypes.Add(typeof(TypeOne)); 
     SuspensionManager.KnownTypes.Add(typeof(TypeTwo)); 
    } 
Các vấn đề liên quan