1

我一直在寻找可以帮助我解决当前在使用 WPF 和 Silverlight 的 MVVM Prism 设置中的文化问题的东西。

我们的设置要求我们有一个使用 en-gb 文化和 us-english 数据库语言设置的中央服务器,Silverlight 系统使用它没有问题,因为我们通过向服务传递用户 CultureInformation 来处理文化差异调用允许我们使用 double.parse(value, userCulture) 处理 XML 中的值,这也允许我们将值传回。我们还支持具有自己的本地数据库的软件的离线版本,该数据库与在线版本共享数据子集,这是使用软件内部更新功能进行更新的。

如果我从我的数据库中检索 XML 数据,则它采用以下示例格式

<code>
<Pipe>
 <RowNumber>1</RowNumber>
 <Standard>Schedule</Standard>
 <Size>125</Size>
 <DN>DN125</DN>
 <TransDN>DN125</TransDN>
 <Inches>5"</Inches>
 <Designation>40</Designation>
 <IntDia>128.20</IntDia>
 <OutDia>141.30</OutDia>
 <Wall>6.5500</Wall>
 <Area>1.290820730000000e002</Area>
</Pipe>
</code>

这会导致以下两种情况出现问题:如果用户在本地运行软件,他们将直接访问 dll,并可能尝试使用机器本地文化设置解析上述数值。以西班牙为例,这将反转数字字段中,.值的使用。这导致 IntDia 值返回为 12820,00。

每次我想检索 XML 数据时,我都可以指定详细信息,但是我想知道是否有更简洁的方法来处理这种情况,以便我们可以以正确的文化返回 xml 数据。

4

1 回答 1

0

万一将来有人遇到这个问题,我必须找到另一种方法。

相反,我选择在单独的线程下运行服务,在该线程中我可以将 Threads 文化指定为 CultureInvariant

        var task = Task.Factory.StartNew(() =>
        {
            Thread.CurrentThread.Name = "GetDetailsAsync";
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

            var uD = details.GetDetails(userName, password, cultureDetails);
            this.dispatcher.BeginInvoke((Action)
                (() => completedAction.Invoke(this, new GetDetailsCompletedEventArgs(new object[] { uD }, null, false, null))));
        });

        task.ContinueWith(
            s =>
            {
                task.Dispose();
                Debug.WriteLine("GetDetailsAsync thread disposed.");
            });
于 2012-11-21T16:09:06.390 回答