2012-06-12 5 views
0

У меня есть приложение, в котором я делаю несколько HttpRequests при запуске. Он работал отлично, прежде чем я попытался переместить большую часть обработки пользовательского интерфейса в другой класс, пытаясь быть более MVVM-приложением. Теперь, когда я загружаю страницу с данными, мое приложение вылетает/завершается без исключения.Приложение WP7 Заканчивается без исключения, привязка данных?

Основным источником этого завершения (я считаю) является то, где я устанавливаю ViewModel для RootFrame приложения, чтобы я мог ссылаться на его классы в моих привязках 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). 

FYI мой запуск объекта не является проблемой, так как я видели это с некоторыми людьми.

Заранее благодарим за полезные советы, и если вы считаете, что есть лучший способ реализовать свои привязки данных, пожалуйста, дайте мне знать.

Также, если вам нужна какая-либо другая информация, которая поможет вам ответить на этот запрос, не стесняйтесь спрашивать.

+1

Конфигурирование Visual Studio, случайные исключения, вы можете узнать больше информации о том, что происходит. В VS нажмите ctrl + alt + e и активируйте флажок «брошенный» перед «Исключениями общего времени выполнения языка» –

ответ

1

Я думаю, что вы, возможно, возникли некоторые проблемы с синхронизацией ...

Может быть, вы должны выполнять некоторые основные протоколирования (запрос начинается и закончили, ....), чтобы получить лучший взгляд на проблема.

Я видел некоторые проблемы с использованием WebClient и различными параллельными запросами, возможно, вам стоит это проверить. Поскольку я знаю, что обратный вызов WebClient использует угрозу пользовательского интерфейса, это также может быть проблемой, когда это случается с ранним (может быть, когда ваша виртуальная машина запускает запрос и получает активацию досрочно).

+0

Если это только проблема с WebCliet, тогда у меня не должно быть проблем, так как я использую HttpRequest (если только это не использует WebClient). – methodMan

+0

WebClient использует HttpRequest внутри (как я знаю) ... Если вы хотите, вы можете отправить мне свой код, и я могу посмотреть на него ... трудно найти такие проблемы с его отладкой ... –

+0

Yah, I'm проводили время, пытаясь понять проблему, но похоже, что она рушится даже до того, как будет сделано любое HttpRequest. Я уверен, что это связано с привязкой данных. Я считаю, что я вызывал событие NotifyPropertyChenged в неподходящее время или что-то в этом роде. Я сделал кучу передвижения по моему коду, и, похоже, он уже прошел мимо этой икоты, он просто не привязан к данным ... Увы, это очень странная проблема. – methodMan

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; 
} 
+0

Хорошо спасибо, я попробую это и дам вам знать .... – methodMan

Смежные вопросы