1

我正在从我的 JavaScript(在我的 Windows 8 应用程序中)调用 C# 代码中的一个函数,该函数从服务中获取一些值并将其返回给 JavaScript。我需要在我的 JavaScript 调用方法中处理 C# 代码引发的错误。如果可能,请告诉我。一个代码示例会很棒。

4

2 回答 2

2

调用外部库时 WinJS 中的异常以“JavaScript”方式处理。一个例子是:

try {
    //Run some code here
    TestClassLibrary.Class1.runMe();
}
catch (err) {
    //Handle errors here
    console.log(err.message);
}

对于简单的 C# 类:

namespace TestClassLibrary
{
   sealed public class  Class1
    {
        public static void RunMe()
        {
            throw new Exception("something is wrong!!");
        }
    }
}

您将在控制台中收到以下消息:

System.Exception: something is wrong!!
   at TestClassLibrary.Class1.RunMe()

注意:确保您的 Class 被标记为seal,并且您的项目输出是WinMD

于 2012-06-20T18:17:32.263 回答
0

您还可以查看在Windows.Networking.Sockets命名空间中实现的错误策略。

他们有一个SocketError 类,它有一个静态方法 getStatus(hresult)并返回一个SocketErrorStatus 枚举

您可以使用自定义 HRESULT 代码实现自定义异常(但必须为负),例如:

public class TestException : Exception
{
 /// <summary>
 /// Constructs the exception from a string message
 /// </summary>
 /// <param name="message">error description</param>
 public TestException(String message)
 : base(message)
 {
   base.HResult = -1001;
 }
}

您还将提供一个类 TestError ,根据 hresult 将返回您的 TestErrorStatus 枚举的成员,该成员可能如下所示:

namespace TestClassLibrary
{
    public enum TestErrorStatus
    {
        TestError = -1001
    }
}

在您的 WinJS 代码中,您将检查:

function (error) {
 var errorStatus = TestClassLibrary.TestError.getStatus(error.number);
 if (errorStatus == TestClassLibrary.TestErrorStatus.TestError) {
  // error is TestException
 } 
} 
于 2013-03-01T12:25:24.233 回答