Изменить культуру текущего потока в приложениях UWP

В приложении UWP я хочу изменить культуру нового созданного потока следующим образом:

private  void btnRun_Click(object sender, RoutedEventArgs e)
{
    newThread = new Thread(new ThreadStart(TestMethod));
    newThread.Start();
}

private void TestMethod()
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
}

Установка свойства CurrentCulture в теле метода потока приводит к изменению культуры всех потоков приложения (также UI потока).

Эта проблема возникает только в приложениях UWP, и это нормально в других типах проектов .net.


person Emad Feiz    schedule 20.05.2019    source источник
comment
Для этого вопроса существует много дубликатов, трудно выбрать лучший. Давайте перенесем вас здесь, следите за будущими улучшениями.   -  person Hans Passant    schedule 20.05.2019
comment
Вы, наконец, нашли хорошее решение/обходной путь? Ломаю себе мозг этим вопросом.   -  person Esteban Chornet    schedule 03.12.2020
comment
Нет хорошего решения, я переключаюсь между культурами по некоторым условиям в моем коде.   -  person Emad Feiz    schedule 06.12.2020


Ответы (1)


Я использую UWP в Xamarin.Forms, поэтому мой обходной путь выглядит следующим образом:

внутри метода OnLauncehd в App.xaml.cs я написал следующий код:

            CultureInfo ci = new CultureInfo("en-GB");
            Thread.CurrentThread.CurrentCulture = ci;
            Thread.CurrentThread.CurrentUICulture = ci;
            ApplicationLanguages.PrimaryLanguageOverride = "en-GB";
            Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
            Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();

В случае, если это не сработает, я делаю это и в MainPage.xaml.cs:

 public sealed partial class MainPage
    {
        public MainPage()
        {


            this.Loaded += (sender, args) => {

                SetEnGbCulture();

            };
        }

        public void SetEnGbCulture()
        {
            CultureInfo ci = new CultureInfo("en-GB");
            Thread.CurrentThread.CurrentCulture = ci;
            Thread.CurrentThread.CurrentUICulture = ci;
            ApplicationLanguages.PrimaryLanguageOverride = "en-GB";
            Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
            Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();

        }
    }
person Amir Hajiha    schedule 25.01.2020