【问题标题】:ShowDialog returns immediately after a handled exception in .net compact frameworkShowDialog 在 .net 紧凑框架中处理异常后立即返回
【发布时间】:2010-04-01 09:58:38
【问题描述】:

我遇到的问题是,由于某种原因,ShowDialog 在处理异常后立即返回。但是,它适用于 MessageBox.Show() 或在我第二次调用 ShowDialog 时。解决此问题的最佳方法是什么?

我只能找到this。而且我不敢相信没有其他人有这个问题。

我正在使用 .net 紧凑框架 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
  }
}

【问题讨论】:

  • 在 SomeOtherForm 中编写一个 FormClosing 事件处理程序,在其上设置断点并在它中断时发布您看到的堆栈跟踪。
  • 不幸的是没有调用关闭事件。

标签: c# windows-mobile compact-framework


【解决方案1】:

我刚刚在another question中回答了以下问题,我认为这与同一问题有关。尽管在您的情况下 2) 可能不起作用(除非手动阻塞线程)。

我也遇到过这个问题。 这是 .NET CF 中的一个已知问题 (v2.0),但我在使用时也有它 v3.5(虽然在这种情况下 它发生的更具体)。你可以 找到(旧且仍然活跃的)错误 在这里报告。

调用 MessageBox.Show() 会导致它 立即关闭,但就我而言 有两种解决方法:

1) 调用 MessageBox.Show() 第二次。 然后它会阻塞直到被 用户。你可以检查第一个 MessageBox.Show() 过早关闭 通过检查 DialogResult。我不 记住它返回的结果 到底是什么时候失败的,我记得 给出非默认结果。

2) 创建自定义表单并调用 ShowDialog() 关于那个。它为 我,但其他人已经举报了 不起作用。你也可以打电话 Show() 并让它阻止你自己 (别忘了打电话 Application.DoEvents() 所以它保持 处理事件)。

【讨论】:

猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2010-10-17
  • 2011-02-18
  • 1970-01-01
相关资源
最近更新 更多