Установите его в основном потоке (ваш asyncCompleted, вероятно, работает в другом потоке).Дайте мне знать, если вы не знаете, как это сделать.Нет необходимости клонировать Культуру.(строка 2 в вашем коде).Просто установите его напрямую:
var dateFormatString = e.Result.DateFormatString;
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString;
** РЕДАКТИРОВАТЬ добавил пример кода для вызова из потока пользовательского интерфейса.Вы всегда можете передать состояние асинхронному вызову wcf.В этом случае я передаю Диспетчер.Как только обратный вызов вызван, используйте Диспетчер, чтобы изменить культуру пользовательского интерфейса в потоке пользовательского интерфейса.Я написал это на макушке, но этого должно быть достаточно, чтобы дать вам представление о том, что вам нужно делать.
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!
}
);
}
** РЕДАКТИРОВАТЬ 2 (ответить на вопрос)
Еслиу вас есть удобный UIElement, вы можете использовать его свойство Disptacher.В противном случае используйте статический:
Deployment.Current.Dispatcher