1

サービスからいくつかの値をフェッチし、それを JavaScript に返す JavaScript (Windows 8 アプリケーション) から C# コードで関数を呼び出しています。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名前空間に実装されているエラー戦略を確認することもできます。

それらには、静的メソッド getStatus(hresult)を持つSocketError クラスがあり、 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;
 }
}

また、hresult に応じて TestErrorStatus 列挙型のメンバーを返すクラス TestError を提供します。これは次のようになります。

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 に答える