0

起動時に複数の HttpRequests を作成しているアプリケーションがあります。より多くの MVVM アプリケーションにしようとして、多くの UI 処理を別のクラスに移動しようとする前は、正常に動作していました。データを含むページを読み込んでいるときに、例外なくアプリケーションがクラッシュ/終了します。

この終了の主な原因 (私は信じています) は、アプリケーションの RootFrame の ViewModel を設定して、xaml バインディングでそのクラスを参照できるようにする場所です。

    (App.Current as App).RootFrame.DataContext = (App.Current as App).ViewModel;

これがないとアプリは起動しますが、ページにバインドされたデータはありません。ViewModel を RootFrame のデータ コンテキストとして設定しようとすると同時に、ViewModel を変更する非同期 Http 呼び出しがいくつかあると思います。これがこの種の終了を引き起こすかどうかはわかりませんが、推測に過ぎません。

この部分がエラーの原因であると確信しています。アプリがシャットダウンした後、出力が次のようになるためです。

    'UI Task' (Managed): Loaded 'mscorlib.dll'
    'UI Task' (Managed): Loaded 'System.Windows.RuntimeHost.dll'
    'UI Task' (Managed): Loaded 'System.dll'
    'UI Task' (Managed): Loaded 'System.Windows.dll'
    'UI Task' (Managed): Loaded 'System.Net.dll'
    'UI Task' (Managed): Loaded 'System.Core.dll'
    'UI Task' (Managed): Loaded 'System.Xml.dll'
    'UI Task' (Managed): Loaded '\Applications\Install\CCB2E631-D1D5-4AB0-B253-7B6CF6367D16\Install\ParkQuest.dll', Symbols loaded.
    'UI Task' (Managed): Loaded 'Microsoft.Phone.dll'
    'UI Task' (Managed): Loaded 'Microsoft.Phone.Interop.dll'
    'UI Task' (Managed): Loaded 'Microsoft.Xna.Framework.dll'
    'UI Task' (Managed): Loaded '\Applications\Install\CCB2E631-D1D5-4AB0-B253-7B6CF6367D16\Install\Facebook.dll'
    'UI Task' (Managed): Loaded '\Applications\Install\CCB2E631-D1D5-4AB0-B253-7B6CF6367D16\Install\System.Windows.Interactivity.dll'
    'UI Task' (Managed): Loaded '\Applications\Install\CCB2E631-D1D5-4AB0-B253-7B6CF6367D16\Install\Microsoft.Expression.Interactions.dll'
    'UI Task' (Managed): Loaded 'System.Runtime.Serialization.dll'
    'UI Task' (Managed): Loaded '\Applications\Install\CCB2E631-D1D5-4AB0-B253-7B6CF6367D16\Install\Microsoft.Phone.Controls.Toolkit.dll'
    The thread '<No Name>' (0x1af811be) has exited with code 0 (0x0).
    The thread '<No Name>' (0x1ada0ebe) has exited with code 0 (0x0).
    The thread '<No Name>' (0x1a9c105a) has exited with code 0 (0x0).
    The program '[457643138] UI Task: Managed' has exited with code 0 (0x0).

参考までに、私のスタートアップ オブジェクトは問題ではありません。

有益な提案をお寄せいただきありがとうございます。データバインディングを実装するより良い方法があると思われる場合は、お知らせください。

また、このお問い合わせへの回答に役立つその他の情報が必要な場合は、お気軽にお問い合わせください。

4

2 に答える 2

1

タイミングに問題があると思いますが…

問題をよりよく理解するために、いくつかの基本的なログ (要求の開始と終了など) を実装する必要があるかもしれません。

WebClient とさまざまな並列リクエストの使用に関するいくつかの問題を見てきました。これを確認する必要があるかもしれません。WebClient コールバックが UI の脅威を使用していることを知っているので、これは早期に発生した場合にも問題になる可能性があります (VM がリクエストを開始し、早期に初期化される場合)...

于 2012-06-12T07:02:59.240 に答える
0

これが役立つかどうかはわかりませんが、通常はコード ビハインドでこれを行い、ビューの ViewModel を設定します。

public MainPage()
{
    InitializeComponent();
    MainPageVMProperty = new ViewModels.MainPageViewModel();
}

public ViewModels.MainPageViewModel MainPageVMProperty { get; set; }

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    LayoutRoot.DataContext = MainPageVMProperty;
}
于 2012-06-12T06:39:56.657 に答える