MessageBox.Show, не блокирующий поток

Я занимаюсь обслуживанием веб-сайта на основе Silverlight с использованием шаблона MVVM и построенного на платформе CSLA для его бизнес-логики. Недавно возникла странная проблема, когда я должен нажать несколько раз, чтобы сохранить, прежде чем диалог сохранения появится на экране. После небольшого исследования я обнаружил, что диалог MessageBox OK / Cancel, который должен блокировать поток до тех пор, пока не будет нажата кнопка OK или Cancel, позволяет потоку проходить через него, вообще ничего не показывая на экране. Вот соответствующий метод в базовом классе модели представления:

    private void SavingProcess(object sender, ExecuteEventArgs e)
    {
        IsSavedProcessCancelled = true;
        MessageBoxResult result;

        if (IgnoreSaveMessageBox) 
            result = MessageBoxResult.OK;
        else
            result = MessageBox.Show("Are you sure want to save the data?", "Data Changes", MessageBoxButton.OKCancel);

        if (result == MessageBoxResult.OK)
        {
            IsSavedProcessCancelled = false;
            base.Save(sender, e);
        }
    }

IgnoreSaveMessageBox имеет значение false, и выполнение кода правильно передается оператору else. Когда я прохожу через него, он проходит через строку MessageBox.Show(), как и любой другой. Даже более странный, результат на самом деле имеет значение "None" впоследствии вместо того, чтобы быть нулевым, как я ожидал.

Я решил попробовать обернуть первый оператор if / else в цикле while, чтобы посмотреть, что произойдет (я понимаю, что это действительно ужасная вещь, и не принял бы ее как решение, даже если бы это сработало):

        MessageBoxResult result = MessageBoxResult.None;

        while (result != MessageBoxResult.OK)
        {
            if (IgnoreSaveMessageBox)
                result = MessageBoxResult.OK;
            else
                result = MessageBox.Show("Are you sure want to save the data?", "Data Changes", MessageBoxButton.OKCancel);
        }

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

Я обошел эту проблему, установив для IgnoreSaveMessageBox значение true при сохранении в этом конкретном экземпляре, но я надеюсь, что кто-то там сможет помочь мне исправить это должным образом. Спасибо за прочтение!

0 ответов

Другие вопросы по тегам