Приложение Silverlight 4 зависает без каких-либо исключений - PullRequest
2 голосов
/ 08 декабря 2011

Я занимаюсь разработкой приложения Silverlight 4 RIA. Существует DataGrid хранилище данных и две кнопки: добавить новый элемент и удалить элемент. После создания нового элемента в течение секунды приложение зависает как this - я объясню странное поведение ниже.

Сценарий создания нового элемента выглядит следующим образом:

  1. После нажатия появляется дочернее окно. Ссылка на источник данных домена, используемый на странице parrent, передается дочернему окну в конструкторе.
  2. Пользователь выбирает файл.
  3. Файл отправляется веб-службе. В ответ веб-служба возвращает некоторые данные из этого файла.
  4. Новый объект данных создается и вставляется в источник данных домена.

Дочернее окно заставляет все приложение зависать только тогда, когда оно вызывается дважды, но первый вызов требует создания объекта. Я могу многократно открывать и закрывать дочернее окно, и все будет работать нормально, пока не произойдет последовательность: open.create -> open.close / open.create. Я пытался отследить все исключения с помощью инструмента VS (alt ctrl e), но их нет.

Точка останова на

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)

тоже ничего не показывает. Есть идеи?

Код страницы. Код дочернего окна

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Удалите следующее и все будет хорошо.

    private void ChildWindow_Closed(object sender, EventArgs e)
    {
        this.DialogResult = false;
    }

И, чтобы оценить немного больше, ChildWindow_Closed - это результат установки DialogResult в первую очередь.Переустановив это, неожиданные вещи случаются.

0 голосов
/ 13 декабря 2011

Я провел немного больше исследований после того, как вы помогли мне с этой проблемой.Кажется, это ошибка SL4.Это также должно помочь.Тема про это на SL форумах.

protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, true);
    }
...