相关疑难解决方法(0)

有没有办法为整个应用程序设置文化?所有当前线程和新线程?

有没有办法为整个应用程序设置文化?所有当前线程和新线程?

我们将文化的名称存储在数据库中,当我们的应用程序启动时,我们就会这样做

CultureInfo ci = new CultureInfo(theCultureString);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
Run Code Online (Sandbox Code Playgroud)

但是,当然,当我们想要在新线程中做某事时,这会"丢失".有没有办法设置CurrentCultureCurrentUICulture整个应用程序?那么新线程也会获得这种文化?或者,只要创建了一个我可以连接的新线程,就会触发某个事件?

c# multithreading cultureinfo

173
推荐指数
5
解决办法
16万
查看次数

如何设置CultureInfo.InvariantCulture默认?

当我在C#中有这样的代码时:

double a = 0.003;
Console.WriteLine(a);
Run Code Online (Sandbox Code Playgroud)

它打印"0,003".

如果我有另一段代码:

double a = 0.003;
Console.WriteLine(a.ToString(CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)

它打印"0.003".

我的问题是我需要一个点作为十进制标记,但C#默认使用逗号.此外,我不想只打印出一个双变量来输入如此长的代码.

c# double

21
推荐指数
4
解决办法
5万
查看次数

.NET 4.5的奇怪TextBox问题 - 没有'.' 允许

我有一个与.NET 4.5相关的非常奇怪的问题.今天用户告诉我,他无法将浮动数字输入文本框(如"2.75").文本框不接受".",这是我文化中浮动数字的正确"分隔符"("de-CH").

我用.NET 4.5编译软件之后发生了这个问题(以前它是4.0).

我可以重现这个错误.应用程序中的所有其他文本框都正常工作.文本框是常规WPF控件.没有花哨的用户定义控件或类似的东西.

再说一次:文本框不接受'.' 作为一个角色.它似乎完全忽略了它.每个其他角色(甚至像"@"这样的特殊角色)都很好.在.NET 4.0上重新编译应用程序解决了这个问题.

文本框的xaml是:

<TextBox x:Name="_Hours" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center" 
TextAlignment="Center" FontWeight="Bold" FontSize="16" Text="{Binding ProcessHours, 
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextChanged="Hours_TextChanged" />
Run Code Online (Sandbox Code Playgroud)

ProcessHours的定义:

partial class ProjectTask
{
    ...
    public double TotalProcessHours { get { return ProjectBookings.Sum(b => 
b.ProcessHours); }}
    ...
}
Run Code Online (Sandbox Code Playgroud)

Hours_TextChanged是:

private void Hours_TextChanged(object sender, TextChangedEventArgs e)
{
    UpdateHoursValidity();
}
Run Code Online (Sandbox Code Playgroud)

UpdateHoursValidity()只是淡化实际文本框下面的文本消息.它没有以任何方式与"损坏"文本框连接:

private void UpdateHoursValidity()
{
    string key = IsInvalidHoursWarning ? "ShowWarningStoryboard" : 
"HideWarningStoryboard";
    var storyboard = FindResource(key) as Storyboard;
    if(storyboard != null) storyboard.Begin();
}
Run Code Online (Sandbox Code Playgroud)

所以这里也没什么特别的.

到目前为止我尝试了: - 删除文本框,重新编译,再次添加文本框,重新编译 …

.net c# wpf textbox

8
推荐指数
1
解决办法
1024
查看次数

默认文化

我使用.NET4

我使用 en-US 语言环境,并且希望我的应用程序仅以这种方式工作。

不过,我的一些软件客户来自小数点用“,”表示的国家(例如挪威)。

因此,下一行为我的挪威客户抛出异常:

double a = double.Parse("1.5");
Run Code Online (Sandbox Code Playgroud)

我读过我可以更改 CurrentCulture,如下所示:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)

问题是我必须为每个线程单独执行此操作。此外,我不完全确定我将在哪里隐式解析双精度,所以我必须在每个线程创建时执行此操作......

我读到有一个针对 .NET 4.5 的解决方案,通过更改DefaultThreadCurrentCulture.

有没有人想到一个通用的解决方案,无需升级我的 .NET 框架版本?

c# culture cultureinfo .net-4.0 internationalization

5
推荐指数
1
解决办法
1125
查看次数