Эмуляция функциональности ShowDialog

Только ответить на несколько комментариев к моему выше сообщения:

Domenic - я нахожусь на этом сайте, и я забочусь. Не для пользы педантизма, но потому что мы - как программисты - обычно заботимся о точности. Используя O () нотация неправильно в стиле, который некоторые сделали здесь, представляет его довольно бессмысленный; мы можем точно также сказать, что что-то берет единицы времени n^2 в качестве O (n^2) в соответствии с соглашениями, используемыми здесь. Используя O () ничего не добавляет. Это не просто маленькое несоответствие между общим использованием и математической точностью, о которой я говорю, вот в чем разница между ним являющийся значимым и этим нет.

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

onebyone - ну, не действительно, хотя я беру Вашу точку. Это не O (1) для произвольно большого n, который является видом определения O (). Это просто идет, чтобы показать, что O () ограничил применимость для ограниченного n, где мы на самом деле говорили бы о количестве сделанных шагов, а не привязанный то число.

5
задан Dave Clemmer 31 August 2011 в 17:31
поделиться

3 ответа

Вы можете прочитать эту статью о CodeProject и эту статью в MSDN. В первой статье описывается создание блокирующего модального диалогового окна вручную, а во второй статье показано, как создавать настраиваемые диалоговые окна.

5
ответ дан 13 December 2019 в 22:09
поделиться

Вы можете превратить вашу функцию в итератор, который возвращает IEnumerator , а затем записать его вот так:

//some code
yield return new CustomMessageBox("hello world");
//some more code

Затем вы должны написать функцию-оболочку, которая принимает перечислитель и вызывает MoveNext (который будет выполнять все функции до следующего yield return ) в DialogClosed обработчики.

Обратите внимание, что функция-оболочка не будет блокирующим вызовом.

0
ответ дан 13 December 2019 в 22:09
поделиться

Установите еще один цикл сообщений в классе окна сообщений. Что-то вроде:

public DialogResult ShowModal()
{
  this.Show();

  while (!this.isDisposed)
  {
    Application.DoEvents();
  } 

   return dialogResult;
}

Если вы посмотрите на Windows.Form в Reflector, вы увидите, что он делает что-то вроде этого ..

0
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: