Что-то попробовать:
Установите культуру и создайте диалог одним вызовом, например:
// 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 используются повторно и собирают мусор. Если вы выполняете вызов управляемого кода, который устанавливает культуру, и второй вызов для создания окна, возможный сценарий:
- Вы вызываете управляемый код для установки культуры.
- Создан новый управляемый поток
- Ваш звонок возвращается, и управляемый поток освобождается.
- Вы вызываете управляемый код для создания и отображения окна.
- Создан новый управляемый поток
- В окне отображается не та культура
Такая последовательность событий возможна в зависимости от реализации кода привязки управляемого потока нативного потока. Поэтому я предлагаю вам попробовать сделать оба в одном вызове, чтобы увидеть, изменит ли это что-либо.