4

メインで try ... catch ブロックを使用しています。

以下を設定すると

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

これにより、すべての例外が処理され、英語で出力されます

しかし、これは内部的に多くの API で失敗し、特にディレクトリ アクセスのようにキャッチされた例外では失敗します。他に何かする必要がありますか?

したがって、主な問題はこの Execption です

System.Net.Sockets.SocketException (0x80004005):

この後のメッセージはロケール セットに表示されません

4

3 に答える 3

1

Win32 FormatMessage Code ブロックを使用してこれを行うことができました

[DllImport("Kernel32.dll", SetLastError=true)]
static extern uint FormatMessage( uint dwFlags, IntPtr lpSource, 
   uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer, 
   uint nSize, string[] Arguments);

langidを英語に設定することで!

于 2012-10-08T06:36:43.410 に答える
0

ユーザーの文化を選択しないでください。彼に自分でやらせてください。
まれに、定義済みのカルチャを使用する必要がある場合がありますが、ほとんどの場合、それはユーザーのビジネス (どのカルチャを使用するか) です。

于 2012-10-04T09:27:38.470 に答える
0

この問題は部分的に回避できます。フレームワークの例外コードは、現在のスレッド ロケールに基づいて、そのリソースからエラー メッセージを読み込みます。一部の例外の場合、これは Message プロパティへのアクセス時に発生します。

これらの例外については、メッセージのログ記録中にスレッド ロケールを一時的に en-US に切り替えることで、完全な米国英語バージョンのメッセージを取得できます (事前に元のユーザー ロケールを保存し、その後すぐに復元します)。

別のスレッドでこれを行うと、さらに効果的です。これにより、副作用がないことが保証されます。

参考:英語の例外メッセージ?

于 2012-10-04T09:20:46.630 に答える