0

我有一个应用程序,我在启动时制作了多个 HttpRequests。在我尝试将大量 UI 处理转移到不同的类以尝试更像一个 MVVM 应用程序之前,它工作正常。现在,当我用数据加载页面时,我的应用程序崩溃/终止,无一例外。

这个终止的主要来源(我相信)是我为应用程序的 RootFrame 设置 ViewModel 的地方,以便我可以在我的 xaml 绑定中引用它的类。

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

没有这个,应用程序将启动,但我的数据都没有绑定到页面。我猜有一些异步 Http 调用正在更改 ViewModel,同时它试图将该 ViewModel 设置为 RootFrame 的数据上下文。我不确定这是否会导致这种终止,但我只是猜测。

我很确定这部分是导致错误的原因,因为在此之后应用程序刚刚关闭,输出如下:

    '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 回答