簡體   English   中英

WPF - 在異步任務的回調中更改 UI 文化

[英]WPF - Change UI culture in callback of asynchrone task

在我的應用程序中,用戶可以切換語言。 在應用更改之前,會進行檢查。 完全同步這項工作很好。

現在,檢查是異步的,並且是 UI 線程集CultureInfo.CurrentUICulture上的回調。 但是在回調結束時, CultureInfo.CurrentUICulture是回滾的。 請參閱此示例:

主窗口.xaml :

<StackPanel>
    <ComboBox SelectionChanged="ComboBox_Selected">
        <ComboBoxItem>en-US</ComboBoxItem>
        <ComboBoxItem>en-GB</ComboBoxItem>
        <ComboBoxItem>fr-FR</ComboBoxItem>
    </ComboBox>
    <Button Click="Button_Click">Display</Button>
</StackPanel>

主窗口.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ComboBox_Selected(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine($"A - {Thread.CurrentThread.ManagedThreadId} - {Thread.CurrentThread.IsBackground}");
        var to = ((ComboBoxItem)((ComboBox)sender).SelectedItem).Content as string;
        Task.Delay(TimeSpan.FromSeconds(1)).ContinueWith(
            t => SetCurrentCulture(to),
            TaskScheduler.FromCurrentSynchronizationContext()
        );
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(CultureInfo.CurrentCulture.Name);
    }

    private static void SetCurrentCulture(string to)
    {
        Debug.WriteLine($"B - {Thread.CurrentThread.ManagedThreadId} - {Thread.CurrentThread.IsBackground}");
        var culture = new CultureInfo(to);
        CultureInfo.DefaultThreadCurrentCulture = culture;
        CultureInfo.DefaultThreadCurrentUICulture = culture;
        CultureInfo.CurrentCulture = culture;
        CultureInfo.CurrentUICulture = culture;
    }
}

你能解釋一下為什么嗎? 如何解決這個問題?

你能解釋一下為什么嗎?

文檔

對於面向 .NET Framework 4.6 或更高版本的應用程序,區域性是異步操作上下文的一部分。 換言之,從面向 .NET Framework 4.6 的應用開始,異步操作默認繼承啟動它們的線程的CurrentCultureCurrentUICulture屬性的值。

如何解決這個問題?

將以下開關添加到您的App.config文件以切換回 .NET Framework 4.5.2 中的行為:

<runtime>
    <AppContextSwitchOverrides value="Switch.System.Globalization.NoAsyncCurrentCulture=true" />
</runtime>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM