【问题标题】:Why does catch block never execute on the device?为什么 catch 块永远不会在设备上执行?
【发布时间】:2012-12-09 12:34:48
【问题描述】:

考虑这段代码:

Task.Factory.StartNew (() => {
    try {
        Console.WriteLine ("Throwing");
        throw new Exception ();
    } catch {
        Console.WriteLine ("Gotcha!");
    }
});

在 iOS 模拟器上,它按预期打印 ThrowingGotcha!
但是,为设备编译时,它只打印Throwing,从不打印Gotcha!

为什么会这样?
我正在使用 MonoTouch 6.0.8。
我也可以在 6.0.6 上重现它。

我发了一个sample project here, you can try to run it on the device
(别管它的名字——当我发现这个时,我正在调查另一个崩溃)。

【问题讨论】:

  • 试试看这个以前的stackoverflow post-stackoverflow.com/questions/363495/…
  • @DJ:不知道它是如何相关的。我抛出一个异常,catch 没有捕捉到它。
  • @DJ,这显然是一个简单的例子来说明问题。
  • 这是来自 Xamarin 的类似错误报告,声称已在 5.3.4 版中修复:bugzilla.xamarin.com/show_bug.cgi?id=5423。您是否尝试过更新您的 Monotouch 版本?
  • @Diego:我的是最新的。 :-) 但这看起来确实非常相似。

标签: c# xamarin.ios task-parallel-library xamarin


【解决方案1】:

我刚刚发现它只发生在启用 LLVM 的情况下。
也许这是一个错误,所以我会将它报告给 Xamarin。

有趣的是,添加

BeginInvokeOnMainThread (() => {
    new UIAlertView ("Gotta catch 'em all!", "", null, "OK", null).Show ();
});

Console.WriteLine 呼叫帮助后,我看到了警报和日志条目。

这是我的sample project

【讨论】:

  • 听起来确实像个错误!
  • 奇怪的是,我无法在另一个项目中重现它。哼哼。
  • 对于它的价值,我也无法在我的项目中复制它。希望你能追查到具体情况。 :)
  • @Kirk:所有Console.WriteLine 消息都出现在设备控制台中吗?
  • @DanAbramov 请在bugzilla.xamarin.com 上填写此类问题,以便合适的开发人员可以修复它们:-)
【解决方案2】:

也许是一个愚蠢的问题,但是否满足了需要 catch 命令的条件?

如果是这样,应用程序在返回“Gotcha”之前可能会中断,iOS 命令会接管。

我相信 iOS 会监听您的命令/应用程序是否以及何时中断,因为默认函数会启动来处理这个问题。类似于 dealloc 命令。

【讨论】:

  • 但奇怪的是应用程序并没有崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 2018-02-26
  • 2015-01-18
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
相关资源
最近更新 更多