#.net #localization #process #background #worker
Вопрос:
Я испытываю какое-то странное поведение с локализованными сообщениями, сообщаемыми из моего фонового рабочего процесса в приложении Windows forms.
Приложение представляет собой приложение установки с Windows forms. Приложение запускает фонового рабочего для выполнения и сброса IIS, а затем установки MSIS.
В первый раз, когда я запускаю приложение на виртуальной машине Win Server 2003 на испанском языке, формы на испанском языке, но не сообщения BWP. Если я немедленно запущу его снова, сообщения будут на испанском языке.
Файлы .Resources являются встроенными ресурсами и извлекаются во временный каталог при запуске приложения.
Мой код извлекает локализованные строки с помощью пользовательского класса диспетчера ресурсов. Этот класс создает файловый ресурс для файлов .Resources во временном каталоге. Это работает правильно, потому что метки и заголовок Windows forms каждый раз локализуются.
Кто-нибудь испытывал это? Я совершенно застрял, пожалуйста, помогите. Спасибо, Эндрю
Комментарии:
1. Прошло некоторое время с тех пор, как я задавал этот вопрос, но я считаю, что решением было сначала извлечь файлы ресурсов во временный каталог Windows перед запуском BWP и использовать CurrentUICulture для сообщений.
Ответ №1:
Если ваш UIThread использует другую культуру UICulture, чем ваш BackgroundWorker, вы можете явно изменить культуру рабочего потока, используя обратный вызов, подобный этому:
private delegate CultureInfo GetUICultureCallback();
private CultureInfo GetUICulture()
{
if (this.InvokeRequired)
{
return (CultureInfo)this.Invoke(new GetUICultureCallback(GetUICulture));
}
return System.Threading.Thread.CurrentThread.CurrentUICulture;
}
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = GetUICulture();
for (; ; )
{
if (backgroundWorker.CancellationPending)
{
e.Cancel = true;
return;
}
.
.
.
Ответ №2:
Информация о культуре хранится в локальном хранилище потоков, поэтому, если фоновый рабочий запускает процессы в разных потоках, этого можно ожидать.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx
http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture.aspx
Однако я не уверен, какова рекомендуемая практика передачи информации о культуре между потоками.