Я использую try catch, но все равно выдает ошибку в приложении WPF - PullRequest
1 голос
/ 23 апреля 2011

Вот код конструктора страницы

public DebitNoteCreation(int transactionID) :
        this()
    {
        try
        {
            InsertDebitNote dn = new InsertDebitNote();
            dn.Load(transactionID);
            this.DataContext = dn;
        }
        catch (Exception)
        {
            MessageBox.Show("Some of the entries for this transaction are empty so kindly complete them", "Error");
        }
        this.NavigationService.Navigate(new Uri("DisplayTransaction.xaml", UriKind.Relative));
    }

Сообщение об ошибке

Ссылка на объект не установлена ​​для экземпляра объекта.

Я вижу окно сообщения, но после того, как я нажимаю кнопку «ОК», оно выдает вышеописанную ошибку.

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

Поскольку ошибка возникает после , когда вы нажимаете OK, я ожидаю , что this.NavigationService равно null, из-за сбойного конструктора.

Кроме того, выне следует предполагать, что Exception означает «Некоторые записи для этой транзакции пусты, поэтому любезно завершите их», и позволить конструктору преуспеть, когда ему явно не удалось полностью инициализировать объект, очень опасно.

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

1 голос
/ 23 апреля 2011

Если выдается исключение для отображения окна сообщения, это говорит о том, что что-то пошло не так ... и вы ничего не назначите для this.DataContext.Это может стать причиной последующих ошибок.

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

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

Если у вас есть для продолжения, установите в качестве контекста пустую заметку или что-то в этом роде.Я подозреваю, что вы на самом деле не хотите показывать страницу в этом случае.Возможно, вы захотите загрузить транзакцию до создания страницы, чтобы сделать ее немного чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...