Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 地铁中的本地化问题_C#_Windows 8_Microsoft Metro_Windows 8.1 - Fatal编程技术网

C# 地铁中的本地化问题

C# 地铁中的本地化问题,c#,windows-8,microsoft-metro,windows-8.1,C#,Windows 8,Microsoft Metro,Windows 8.1,我在metro应用程序中玩应用程序本地化时遇到了一个非常奇怪的问题。在我的应用程序启动功能中,我已注册应用程序语言更改事件 ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += QualifierValues_MapChanged; private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapC

我在metro应用程序中玩应用程序本地化时遇到了一个非常奇怪的问题。在我的应用程序启动功能中,我已注册应用程序语言更改事件

ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += QualifierValues_MapChanged;

private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)
    {
        ResourceManager.Current.DefaultContext.Reset();
    }

这可以正常工作,并在Windows 8.1中调用MapChanged事件,但当我在Windows 8.0中测试同一应用时,它无法正常工作。我调试了这个问题,发现MapChanged事件有时在
PrimaryLanguageOverride
change时不会触发,有时会触发。这是windows的问题还是我做错了什么。

由于支持多视图,资源上下文在windows 8.1中的工作方式略有不同。您应该使用ResourceContext.GetForCurrentView()返回的上下文,而不是DefaultContext。您需要将上下文保存在静态变量或实例变量中,以便它不会超出范围。因此:

class MyClass {
    private ResourceContext m_context;

    public MyClass()
    {
        m_context = ResourceContext.GetForCurrentView();
        m_context.QualifierValues.MapChanged += QualifierValues_MapChanged();
    }
    ...
}

手动键入,因此对于任何键入错误表示歉意。

MapChanged事件发生在用户界面线程以外的线程上,因此您必须执行以下操作,以确保使用UI线程:

ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) =>
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        ResourceManager.Current.DefaultContext.Reset();
        // other update code like myLabel.Text = ...
    });
};

例如,其中Dispatcher是当前页面的Dispatcher属性。

请给我一个否决投票的原因。
ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) =>
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        ResourceManager.Current.DefaultContext.Reset();
        // other update code like myLabel.Text = ...
    });
};