Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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# 锁定Thread.CurrentThread.CurrentUICulture_C#_Asp.net_Multithreading_Thread Safety_Currentuiculture - Fatal编程技术网

C# 锁定Thread.CurrentThread.CurrentUICulture

C# 锁定Thread.CurrentThread.CurrentUICulture,c#,asp.net,multithreading,thread-safety,currentuiculture,C#,Asp.net,Multithreading,Thread Safety,Currentuiculture,我有一个方法,它使用特定的CurrentUICulture运行一个操作,最后它回滚到原始的CurrentUICulture。下面是片段 private static void ExecuteInLanguage(string language, Action action) { var current = Thread.CurrentThread.CurrentUICulture; try { Thread.

我有一个方法,它使用特定的CurrentUICulture运行一个操作,最后它回滚到原始的CurrentUICulture。下面是片段

    private static void ExecuteInLanguage(string language, Action action)
    {
        var current = Thread.CurrentThread.CurrentUICulture;
        try
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
            action();
        }
        finally
        {
            Thread.CurrentThread.CurrentUICulture = current;
        }
    }
CurrentUICulture在项目的不同部分中临时更改

问题是,有时“action()”不会与传递给“ExecuteInLanguage”的临时设置的CurrentUICulture一起运行,而是与其他语言一起运行,这可能是因为CurrentUICulture在其他地方同时发生了更改

使用“锁定”是避免上述问题的正确解决方案吗

    private static void ExecuteInLanguage(string language, Action action)
    {
        var current = Thread.CurrentThread.CurrentUICulture;
        try
        {
            lock (Thread.CurrentThread.CurrentUICulture)
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
                action();
            }
        }
        finally
        {
            Thread.CurrentThread.CurrentUICulture = current;
        }
    }

不,锁在这里没用。但是,如果
action
完全在同一个线程上运行(没有异步或类似的东西),那么唯一可以改变ui区域性的地方就是
action
本身。谢谢@Evk。UI区域性不会更改为操作,但它是在项目的其他部分、其他方法中设置的。但是,如果操作是连续的且始终在同一线程中运行,则在使用相关代码执行时,任何内容都无法更改UI区域性(操作执行的线程的区域性)。您正在设置thread.CurrentThread.CurrentUICulture,因此,当前线程的文化。不同的线程区域性不会影响它。这似乎是使用全局设置尝试修复本地问题的问题。解决方法是将区域性显式传递给
操作