Initial value for each thread is determined using following rules. When CultureInfo.DefaultThreadCurrentCulture is set its value is used otherwise the framework uses CultureInfo.CreateSpecificCulture method to map system locate to framework culture name. This operation may fail in rare cases when system locale is set to invalid value or to value which cannot be translated to framework culture name. In such case CultureInfo.InvariantCulture values is used.