サービスからいくつかの値をフェッチし、それを JavaScript に返す JavaScript (Windows 8 アプリケーション) から C# コードで関数を呼び出しています。JavaScript 呼び出しメソッドで C# コードからスローされるエラーを処理する必要があります。可能であればお知らせください。コードサンプルは素晴らしいでしょう。
質問する
323 次
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 に答える