1

私は、WPFとSilverlightを使用したMVVM Prismセットアップで、カルチャに関する現在の問題を解決するのに役立つ可能性のあるものを探していました。

私たちのセットアップでは、en-gbカルチャと私たちのデータベース言語を使用してセットアップされた中央サーバーが必要です-英語、これは、サービスでユーザーCultureInformationを渡すことによって文化の違いを処理するため、Silverlightシステムによって問題なく使用されます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>

これにより、次の2つのシナリオで問題が発生します。ユーザーがソフトウェアをローカルで実行している場合、ユーザーは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 に答える