ShowDialog возвращается сразу после обработанного исключения в .net compact framework - PullRequest
1 голос
/ 01 апреля 2010

У меня проблема в том, что по какой-то причине ShowDialog возвращается сразу после обработки исключения. Тем не менее, это работает для MessageBox.Show () или во второй раз я вызываю ShowDialog. Как лучше обойти эту проблему?

Мне удалось найти только этого . И я не могу поверить, что ни у кого больше нет этой проблемы.

Я использую .net compact framework 3.5. Пример кода:

try
{
  using(SomeForm f = new SomeForm())
  {
    f.ShowDialog();
  }
}
catch(SomeException)
{
  using(SomeOtherForm f = new SomeOtherForm())
  {
    f.ShowDialog(); // this returns immediately
                    // if this is MessageBox.Show(), it works correctly.
    f.ShowDialog(); // then this works fine
  }
}

1 Ответ

1 голос
/ 19 апреля 2010

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

Я тоже сталкивался с этой проблемой. Это известная проблема в .NET CF (v2.0), но у меня тоже было это при использовании v3.5 (хотя ситуации, в которых это происходит более конкретно). Вы можете найти (старый и все еще активный) баг сообщите здесь.

Вызов MessageBox.Show () заставляет его закрыть сразу, но в моем случае было два обходных пути:

1) Позвонить MessageBox.Show () во второй раз. Затем он блокируется, пока не будет закрыт пользователь. Вы можете проверить первый MessageBox.Show () закрыт преждевременно проверяя DialogResult. Я не помните, какой результат он возвратил точно, когда это не удалось, я помню это выдача результата не по умолчанию.

2) Создайте пользовательскую форму и позвоните ShowDialog () на этом. Это сработало для я, но другие сообщили об этом не работает Вы также можете позвонить Покажи () и сделай так, чтобы он сам себя блокировал (не забудьте позвонить Application.DoEvents (), поэтому он сохраняет обработка событий).

...