显示英语区域设置中的所有异常

时间:2012-10-04 09:10:41

标签: c# locale

我在主要使用try ... catch块。

当我设置以下

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

这会处理所有异常并以英文打印

但是这在内部很多API都失败了,特别是对于像目录访问那样被捕获的异常。还有其他事需要做吗?

所以主要问题是这个Execption

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

此后的消息未出现在区域设置

3 个答案:

答案 0 :(得分:1)

我能够通过使用Win32 FormatMessage代码块

来完成此操作
[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设为英文!

答案 1 :(得分:0)

这个问题可以部分解决。 Framework异常代码根据当前线程区域设置从其资源加载错误消息。在某些例外情况下,这会在访问Message属性时发生。

对于这些例外情况,您可以通过在记录时将线程区域设置简单地切换到en-US来获取完整的美国英语版本的消息(事先保存原始用户区域设置并在之后立即恢复)。

在单独的线程上执行此操作甚至更好:这可确保不会产生任何副作用。

参考:Exception messages in English?

答案 2 :(得分:0)

不要为用户选择文化。让他自己做。
在极少数情况下,当您必须使用预定义文化时,但在大多数情况下,这是用户的业务 - 使用什么文化。