【问题标题】:No exception in method call UIImage.LoadFromData(null) [closed]方法调用中没有异常 UIImage.LoadFromData(null) [关闭]
【发布时间】:2019-08-22 20:49:18
【问题描述】:

在 IOS xamarin 表单项目中:

UIImage.LoadFromData(null)

没有例外

try { UIImage.LoadFromData(null); } catch {}

catch 块中抛出异常..

我需要没有 try|catch 的异常

【问题讨论】:

  • 你的问题是什么?
  • 如果您没有在代码的其他地方处理“全局”异常,那么无论您如何编写代码,它都是System.ArgumentNullException: Value cannot be null. 异常...

标签: c# ios xamarin


【解决方案1】:

您要么有一个全局异常处理程序,要么您正在从后台线程调用它并且没有等待对异步方法的调用,因此您的异常被吞没了。例如,只需这样做:

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    var x = UIImage.LoadFromData(null);
}

你会得到一个System.ArgumentNullException: Value cannot be null 异常,但如果你这样做:

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    Task.Run(() => {
        var x = UIImage.LoadFromData(null);
    });
}

异常将被吞没,即使您有一个全局异常处理程序,您也永远不会看到它。 And this is by design. 任何不是awaited 的fire and forget 任务都会吞下,即不会重新抛出,fire and forget 任务中引发的任何异常。

等待任务会引发异常:

public override async void ViewDidLoad()
{
    base.ViewDidLoad();

    await Task.Run(() => {
        var x = UIImage.LoadFromData(null);
    });
}

【讨论】:

    【解决方案2】:

    您正在吞噬异常。将您期望的异常添加到 catch 块中

    try
    {
    //code
    }
    catch(Exception ex)
    {
    //thrown exception
    }
    

    【讨论】:

    • 在哪里?我正在使用第一个块。尝试 catch 版本可以正常工作,就像您的代码一样。但我使用的代码没有 try catch 并且没有看到异常。执行只是跳过一些东西。
    • 根据这个问题的答案,如果你给方法设置了无效值,你会得到空值返回。 stackoverflow.com/questions/10959297/…
    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多