Chú ý: tài liệu ngày tháng, hãy chắc chắn để đọc Cập nhật ở phía dưới cho những thay đổi trong .NET 4.6
Vâng, đây là một chung yêu cầu nhưng không có sẵn. Windows luôn khởi tạo một chuỗi hệ điều hành cho LCID mặc định của hệ thống, được cấu hình trong applet Regional and Language Options trong Control Panel. Bạn có thể ghi đè điều này miễn là bạn tự tạo chủ đề. Nhưng đó không phải là thực tế cho threadpool đề và chủ đề có thể đã được tạo ra bởi một số loại mã không được quản lý chạy quá trình của bạn, giống như một máy chủ COM.
Trường hợp thứ hai là vấn đề. .NET không gặp sự cố khi chạy mã được quản lý trên các luồng được tạo bởi mã không được quản lý. Nhưng nó không thể làm bất cứ điều gì về cách thread được khởi tạo. Đó là sự thật cho CurrentUICulture mà còn cho những thứ mơ hồ hơn như Thread.SetApartmentState(). Đừng đánh giá thấp khả năng một luồng như vậy chạy mã trong chương trình của bạn, các máy chủ COM được viết bởi Microsoft rất thoải mái.
Bạn sẽ phải rót mã bằng một chiếc lược có răng và tìm thấy bất kỳ mã nào có thể chạy trên chuỗi mà bạn không tạo. Bất kỳ trình xử lý sự kiện nào cũng nghi ngờ, cũng như bất kỳ phương thức BeginXxx() nào có một cuộc gọi lại. BackgroundWorker chắc chắn là vấn đề nhỏ hơn.
Không ghi đè văn hóa của chủ đề có thể tạo ra rất lỗi nhỏ và khó chẩn đoán. Một ví dụ tốt sẽ là một SortedList mà các phím trên một chuỗi. Khi chạy với văn hóa sai, nó ngẫu nhiên sẽ không tìm thấy các phần tử thực sự có trong danh sách. Gây ra bởi danh sách không được sắp xếp nữa trong một nền văn hóa khác với các quy tắc đối chiếu khác nhau.
Nếu tôi quản lý để dọa bạn đủ sau đó tôi nhận được tin nhắn của tôi trên. Điều này đã xảy ra với tôi, gỡ rối một vấn đề với một chương trình rất lớn mà không đúng trên một máy Đan Mạch. Chúng tôi không có bản địa hóa Đan Mạch và buộc giao diện người dùng phải chạy bằng tiếng Anh. Một sợi công nhân sử dụng một cây màu đỏ-đen có một chuỗi là chìa khóa. Nó thất bại ngẫu nhiên khi được yêu cầu xử lý Åårdvårks. Đã cho tôi một tuần.
Cập nhật: sự cố này đã được giải quyết trong .NET 4.5. Lớp CultureInfo hiện có DefaultThreadCurrentCulture và DefaultThreadCurrentUICulture. Khi được đặt, nó sẽ được sử dụng để khởi tạo văn hóa của bất kỳ chuỗi được quản lý nào thay vì văn hóa hệ thống Windows mặc định.Chính xác cách nó tương tác với các chủ đề đã bắt đầu bằng mã gốc và nhập mã được quản lý chưa rõ ràng với tôi.
Cập nhật: vấn đề này có giải pháp toàn diện hơn trong .NET 4.6. Văn hóa bây giờ chảy tự động, hành vi lý tưởng. Bài viết MSDN cho CultureInfo.CurrentCulture() nói về nó. Các thông tin được cung cấp là chưa gây nhầm lẫn, thực nghiệm nó cũng xuất hiện để chảy vào một đối tượng Thread và không chỉ là một Task hoặc threadpool thread và DefaultThreadCurrentCulture không được sử dụng. Hai bước về phía trước, một bước trở lại, thử nghiệm được khuyến khích.