Как заставить определенный файл .resx использоваться в WPF DLL? - PullRequest
1 голос
/ 19 ноября 2009

У меня есть WPF DLL, которая вызывается из неуправляемой DLL. В WPF DLL есть диалоговое окно, которое было переведено (два набора файлов .resx).

Если я вызываю WPF DLL из оболочки WinForm или другой оболочки WPF, я могу принудительно настроить диалог на определенный язык (файл .resx), установив Культуру текущего потока.

Однако при вызове WPF DLL (через interop-COM) из C ++ DLL я не могу заставить диалог WPF переключаться на любой язык, отличный от языка по умолчанию.

Мне не обязательно читать текущую системную культуру, потому что неуправляемая DLL делает это по-другому. Я хотел бы сообщить WPF DLL, какой язык использовать при его запуске.

Как я могу заставить его загружаться с определенным языком во время выполнения?

1 Ответ

1 голос
/ 19 ноября 2009

Что-то попробовать:

Установите культуру и создайте диалог одним вызовом, например:

// Managed code
void SetCultureAndShowWindow(CultureInfo culture, ... more parameters for creating window ...)
{
  Thread.CurrentThread.CurrentCulture = culture;
  Window window = new Window(...
  window.ShowDialog();
}

При вызове из C ++ через взаимодействие NET Framework должна привязать ваш собственный поток к потоку NET Framework. Я не помню деталей, но я кое-что помню о механизме, в котором потоки NET Framework используются повторно и собирают мусор. Если вы выполняете вызов управляемого кода, который устанавливает культуру, и второй вызов для создания окна, возможный сценарий:

  1. Вы вызываете управляемый код для установки культуры.
  2. Создан новый управляемый поток
  3. Ваш звонок возвращается, и управляемый поток освобождается.
  4. Вы вызываете управляемый код для создания и отображения окна.
  5. Создан новый управляемый поток
  6. В окне отображается не та культура

Такая последовательность событий возможна в зависимости от реализации кода привязки управляемого потока нативного потока. Поэтому я предлагаю вам попробовать сделать оба в одном вызове, чтобы увидеть, изменит ли это что-либо.

...