我在主要使用try ... catch块。
当我设置以下
时Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
这会处理所有异常并以英文打印
但是这在内部很多API都失败了,特别是对于像目录访问那样被捕获的异常。还有其他事需要做吗?
所以主要问题是这个Execption
System.Net.Sockets.SocketException (0x80004005):
此后的消息未出现在区域设置
中答案 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来获取完整的美国英语版本的消息(事先保存原始用户区域设置并在之后立即恢复)。
在单独的线程上执行此操作甚至更好:这可确保不会产生任何副作用。
答案 2 :(得分:0)
不要为用户选择文化。让他自己做。
在极少数情况下,当您必须使用预定义文化时,但在大多数情况下,这是用户的业务 - 使用什么文化。