异常处理UWP

时间:2017-08-18 05:54:53

标签: c# uwp

我开始为UWP(通用Windows平台)编写我的第一个程序。我喜欢C#,我读到了关于try-catch块的例外情况 我的应用程序中有一个特殊的结构,我希望得到一些最好的异常处理建议。

我的设置如下:
我有一个名为 MainPage 的页面,其方法为 GetInformation 我有两个类,名为 GetSetting GetConnection 。使用 MainPage GetInformation ,我会收到用户的输入并将其发送到 GetConnections 。在那个方法中,我然后调用 GetSetting (嵌套方法)。

这是我的结构。现在我知道每个部分都会发生错误:用户输入无效,或者我无法连接到表单系统,可能无法访问设置文件或其他一些错误。所以我在我的应用程序的每个部分添加了try-catch块(所以在 GetInformation GetConnection GetSetting )。

  • 我读到了Message Dialog,但它是一个异步方法:如果我尝试向应用程序的每个部分添加一个消息对话框,但如果每个部分都有错误,那么我会得到3个错误对话框。我不想通过添加任务和等待我的所有方法来使我的应用程序不清楚,因为它只是我的应用程序的一部分。我无法找到任何停止在我的应用程序和强制等待用户输入的方法。所以我停止使用这种方式。
  • 我尝试了另一种方法:在 MainPage 中添加一个控件以显示错误消息。这给了我另一个问题:没有办法从所有嵌套方法返回(我找了一个,但我没找到它)。但在 GetConnection GetSetting 中,我无法访问UI元素。所以我必须再次在我的try-catch块中抛出异常,直到我到达 MainPage 。但是通过这种方法,我无法显示有关该异常的任何特殊信息。我想保留我的异常并且我不想创建新的异常并将其抛给 MainPage 因为StackTrace是readonly所以我不能为我的新异常设置它所以我只抛出异常由app创建,我无法添加任何特殊信息。

这些是我的方式,都有一些问题。在这种情况下,异常处理的最佳方法是什么。

更新:

public string GetInformation()
{
    // Some codes here
    var data = GetConnection();
    // Some code here that use data
    // Some other codes
}
public string GetConnection() // In class Connection
{
    // Some codes here
    var data = GetSetting();
    // Some code here that use data
    // Some other codes
}
public string GetSetting() // in class Setting
{
    // Some codes here
}

这是我的代码。在代码的每个部分,如“这里的一些代码”,可能会发生错误。 什么是最好的方式?

2 个答案:

答案 0 :(得分:0)

您需要在最后一步中添加Validation()方法,以获取错误(如果有)。

GetInformation()
{
  return information;  
}

GetConnection()
{
    return connection;
}
GetSetting()
{
    return setting;
}

现在在您的MainPage中包含Validation()方法并实现您的逻辑以在一个messageDialog()中显示结果

希望这有帮助。

答案 1 :(得分:-2)

您可以在捕获异常并显示消息时返回

public void Get()
{
    //Your code

    string returnValue;
    try
    {
        returnValue = GetInformation();
    }
    catch (Exception)
    {
        return;
    }

    //Code that will not cause exception

    try
    {
        //Another possible line of causing exception
    }
    catch (Exception)
    {
        //Error Message
        return;
    }

    //Codes that will not cause exception
}

public string GetInformation()
{
    try
    {
        //Your Code
    }
    catch (Exception e)
    {
        //Error message
        throw new Exception();
    }
}