2011-02-02 8 views
1

私のSLアプリケーションでは、Webサービスに接続して日付形式などのカルチャ情報を取得するページがあります。この情報はSilverlightアプリケーションのインスタンス化では分かっていないので、私はこれをPublic App()コンストラクタで設定できません。次の行は、ページ・クラス内のサービス呼び出しの非同期完了方法で作業していないようです:ページクラスからSilverlightアプリケーションの文化を設定する方法はSilverlightアプリケーションのカルチャをページクラスから設定できますか?

var dateFormatString = e.Result.DateFormatString; 
Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone(); 
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString; 

ありますか?

答えて

0

メインスレッドで設定します(asyncCompletedはおそらく別のスレッドで実行されています)。 これを行う方法がわからない場合は教えてください。 文化を複製する必要はありません。 (コードの2行目)。 はちょうどそれを直接設定します。

var dateFormatString = e.Result.DateFormatString; 
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString; 

** EDITは、UIスレッドから呼び出すためのサンプルコードを追加しました。 非同期wcf呼び出しに常に状態を渡すことができます。この場合、私はディスパッチャーを渡しています。 コールバックが呼び出されると、Dispatcherを使用してUIスレッドのUIカルチャを変更します。 私はこれを頭の上から書いていますが、あなたが何をする必要があるかを知るのに十分なはずです。

public void SetCulture() 
    { 
     YourWcfProxy.GetCultureInfoCompleted += GetCultureInfoCompleted; 
     object state = Dispatcher; // variable just for clarity. 
     YourWcfProxy.GetCultureInfoAsync(state); 
    } 

    private void GetCultureInfoCompleted(object sender, GetCultureInfoCompletedCompletedEventArgs e) 
    { 
     Dispatcher dispatcher = e.UserState as Dispatcher; 
     dispatcher.BeginInvoke(() => 
     { 
      // set the ui culture here! 
     } 
     ); 
    } 

** EDIT 2(回答質問)

あなたがUIElementの便利を持っている場合、あなたはそれがDisptacherプロパティの使用することができます。 それ以外の場合はstaticを使用してください:

+1

+1が保留中です。UIスレッドに転送するコードが含まれています。 – AnthonyWJones

+0

examlpleコードを追加しました;-) – santiagoIT

+0

silverlightアプリケーションのディスパッチャオブジェクトへの参照はどこにありますか? –

関連する問題