我有一个从非托管DLL调用的WPF DLL。 WPF DLL有一个已翻译的对话框(两组.resx文件)。
如果我从WinForm shell或其他WPF shell调用WPF DLL,我可以通过设置当前线程的Culture来强制对话框为特定语言(.resx文件)。
但是,当从C ++ DLL调用WPF DLL(通过interop-COM)时,我无法让WPF对话框切换到默认语言以外的任何语言。
我不一定需要阅读当前的系统文化,因为非托管DLL以不同的方式执行。我想告诉WPF DLL我运行它时使用什么语言。
如何在运行时强制使用特定语言加载?
答案 0 :(得分:1)
要尝试的东西:
设置文化并在一次调用中创建对话框,如下所示:
// Managed code
void SetCultureAndShowWindow(CultureInfo culture, ... more parameters for creating window ...)
{
Thread.CurrentThread.CurrentCulture = culture;
Window window = new Window(...
window.ShowDialog();
}
通过interop从C ++调用时,.NET Framework必须将本机线程绑定到.NET Framework线程。我不记得细节,但我记得一些关于.NET Framework线程被重用和垃圾收集的机制。如果您正在调用设置文化的托管代码并且第二次调用以创建窗口,则可能的情况是:
根据mangaged-native线程绑定代码的实现,可以想到这样的事件序列。因此,我建议您尝试在一次调用中同时查看它是否会发生任何变化。