c# - Thread.CurrentThread.CurrentUICulture not working consistently -
i've been working on pet project on weekends learn more c# , have encountered odd problem when working localization. more specific, problem have system.threading.thread.currentthread.currentuiculture.
i've set app user can change language of app clicking menu item. menu item in turn, saves two-letter code language (e.g. "en", "fr", etc.) in user setting called 'language' , restarts application.
properties.settings.default.language = "en"; properties.settings.default.save(); application.restart();
when application started up, first line of code in form's constructor (even before initializecomponent()) fetches language string settings , sets currentuiculture so:
public form1() { thread.currentthread.currentuiculture = new cultureinfo(properties.settings.default.language); initializecomponent(); }
the thing is, doesn't work consistently. sometimes, works , application loads correct language based on string saved in settings file. other times, doesn't, , language remains same after application restarted.
at first thought didn't save language before restarting application not case. when correct language fails load, if close application , run again, correct language come correctly. implies language string has been saved currentuiculture assignment in form constructor having no effect sometimes.
any help? there i'm missing of how threading works in c#? machine-specific, if makes difference i'm using pentium dual-core cpu.
update
vlad asked me check currentthread's currentuiculture is. added messagebox on constructor tell me currentuiculture two-letter code value of language user string.
messagebox.show(string.format("current language: {0}\ncurrent ui culture: {1}", properties.settings.default.language, thread.currentthread.currentuiculture.twoletterisolanguagename));
when wrong language loaded, both language string , currentuiculture have wrong language. guess currentuiculture has been cleared , problem language setting.
so guess problem application sometimes loads saved language string rather last saved language string. if app restarted, load actual saved language string.
i got same problem. figured out application.restart() not make absolutely restart, see msdn.
so application.restart() not call initializing things within forms constructor initializecomponent(), more "applications restarted in context in run."
so code correct
properties.settings.default.language = "en"; properties.settings.default.save(); public form1() { thread.currentthread.currentuiculture = new cultureinfo(properties.settings.default.language); //... initializecomponent(); }
but doesn't work way application.restart()
. if close app , open again (new) settings taken.
so have find way initialize form again make new language settings happen.
Comments
Post a Comment