2012-06-13 3 views
0

Извините, я понятия не имею, как назвать этот вопрос.MessageBox.Показать и отложить/отложить обновление

Я написал объяснение этой ошибки примерно в 10 раз, а затем удалить его, как это не понятно - простите, я прыгать прямо в код, а затем объясню

public MainWindow() 
    { 
     InitializeComponent(); 
     stuff(); 
    } 

    private void stuff() 
    { 
      DispatcherOperation disOp = Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(delegate 
       { 
        //PrintDialog dialog = new PrintDialog(); 
        //dialog.PrintVisual(canvas1, ""); 
       })); 

      string x = disOp.Status.ToString(); 
      MessageBox.Show(disOp.Status.ToString()); 
    } 

I (F11 в Visual Studio), и когда он попадает в строку disOp.Status.ToString(), следующий F11 переходит на следующую строку, как ожидалось.

Однако, когда я добираюсь до строки MessageBox.Show(disOp.Status.ToString()); и нажимаю F11, он переходит к моему делегату DispatcherOperation.

Мой вопрос: почему это происходит, когда я использую элемент управления Messagebox, но не строку !?

(Это на самом деле EXACT поведение я требую, но я не хочу MessageBox появляться, так как пользователь должен нажать OK/Отмена ... Как еще я могу повторить это?)

Спасибо вы

Dave

+0

Вы правы. Вы не объяснили это хорошо. :-) Если вы не хотите, чтобы ящик сообщений отображался, просто не вызывайте 'MessageBox.Show()'. Что касается того, почему они ведут себя по-другому: компилятор, вероятно, оптимизирует оператор присваивания 'string x', поскольку он выходит за рамки без использования. 'MessageBox.Show()' не делает, потому что он действительно что-то делает. –

ответ

1

BeginInvoke не получите на самом деле выполнить свои действия, пока текущий поток не является свободно обрабатывать ожидающие сбщ и MessageBox должно быть насосным, чтобы сообщения, которые обрабатываются (вроде как DoEvents).

+0

Вы не представляете, насколько это действительно помогло. На самом деле, большое спасибо. – Dave

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