0

これは私が立ち往生している奇妙な問題です。Win8に移植しているWindowsPhoneアプリがあります。これは、基本的に次のように構成されたカレンダーアプリです。

まず、利用可能なすべてのオプションのプレビューがあるMainPage.xaml。[カレンダー]オプションをクリックしたとき。カレンダーと呼ばれる別のページに移動します。アプリのデータ全体は、封印されたクラスであるCycleManagerと呼ばれるクラスによって管理されます。に格納されているデータApplicationDataContainerは、と同等ですIsolatedStorage

インスタンスが初めて作成されるとき、インスタンスはApplicationDataContainer

public sealed class CycleManager
{
    private static readonly CycleManager instance = new CycleManager();

    public CycleManager()
    {
        localfolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        ReadFromIsolatedStorage();

    }

    public static CycleManager Instance
    {
        get
        {
            return instance;
        }

    }
}

メインページに戻ると、データが保存されます。

だから今、私の問題はこれです、私がデバッグするとき。正常に動作します。保存したデータがカレンダーに表示されます。Calendarクラスのコンストラクターで、CreateCalendarという関数を呼び出します。この関数では、データと画像がレンダリングされます。

しかし、シミュレーターから実行すると、保存されたデータは表示されませんが、メインページに戻ってもう一度カレンダーページに戻るとどうなりますか。レンダリングします。

シミュレーターは、デバッグ中に1つの動作を示し、デプロイされたアプリケーションを実行しているjusによって別の動作を示すことができますか?

4

1 に答える 1

1

ApplicationDataContainer 非同期から(async / awaitキーワードを使用して)データをロードしていますか?20ミリ秒を超えるすべてのアクション(これは、単純なコード操作ではないすべてのものです)は、WinRTで非同期に実行する必要があります。

INotifyPropertyChangedデータの読み込みには時間がかかる場合があり、データバインディングの設定方法によっては、通常、イベントを実装しなかった場合は1〜2秒後にデータが画面に表示されるか、まったく表示されません( VSテンプレートには、BindableBaseこれを実行するオブジェクトがあります)。これが正しく実装されている場合、データがポップアップ表示されます。しばらくお待ちください。

ブレークポイントを使用してデバッグしている場合、データは十分に高速にロードされるため、正しく表示されます。シミュレータで前後に移動すると、データをメモリにロードする時間もありました。

また、アプリケーションの起動時にデータをロードし、ロード中に拡張スプラッシュ画面を使用することを検討することもできます。

編集: Windows 8で非同期を開始するための良いリンク:http ://www.silverlightshow.net/items/Windows-8-Metro-Asynchrony-made-easy.aspx 。あなたのシナリオでは、これは

public CycleManager()
{
    localfolder = Windows.Storage.ApplicationData.Current.LocalFolder;
    Task.Run(() => ReadFromIsolatedStorage());

}

public async Task ReadFromIsolatedStorage() { 
    ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 
    ApplicationDataCompositeValue composite = 
            (ApplicationDataCompositeValue)localSettings.Values["Setting"]; 
}

これをINotifyPropertyChangedの正しい実装と組み合わせます(たとえば、BindableBaseから派生したクラスを介してSetProperty、セッターのメソッドを使用します)。

于 2012-08-13T14:35:26.443 に答える