मैं एक विंडोज सेवा बना रहा हूं जो एकाधिक धागे चलाता है। क्या मैं अपने पूरे ऐपडोमेन की संस्कृति को अलग-अलग थ्रेड पर सेट करने के बजाय सेट कर सकता हूं?पूरे एपडोमेन के लिए संस्कृति परिभाषित करें
उत्तर
यह नहीं है मुमकिन। थ्रेड को अपनी डिफ़ॉल्ट संस्कृति मिलती है जब विंडोज थ्रेड बनाता है, सिस्टम डिफॉल्ट लोकेल से प्रारंभ होता है जैसा कि नियंत्रण कक्ष + क्षेत्र और भाषा में कॉन्फ़िगर किया गया है। प्रासंगिक Win32 API फ़ंक्शन Get/SetThreadLocale() हैं।
सीएलआर में किसी अन्य डिफ़ॉल्ट के साथ थ्रेड को imbue करने के लिए कोई तंत्र नहीं है। थ्रेड के लिए एक सामान्य परिदृश्य अप्रबंधित कोड द्वारा बनाए गए जीवन को शुरू करना है और उस अप्रबंधित कोड को चलाने के लिए, कभी-कभी प्रबंधित कोड में कॉलबैक करना होता है। वह प्रबंधित कोड Thread.CurrentCulture के साथ चलाया जाएगा अप्रबंधित कोड द्वारा चुने गए संस्कृति में सेट। या Windows डिफ़ॉल्ट अगर अप्रबंधित कोड SetThreadLocale() को कॉल नहीं करता है। सीएलआर परिवर्तन होने से यह अप्रबंधित कोड में अवांछित विफलता का कारण बन जाएगा।
बेशक आप इसे स्पष्ट रूप से ओवरराइड कर सकते हैं लेकिन सही होना मुश्किल है। सूक्ष्म स्वरूपण त्रुटियां देखने के लिए काफी आसान हैं, जब आप स्ट्रिंग के कोटिंग ऑर्डर पर भरोसा करते हैं, तो डेटा संरचनाओं का उपयोग करते समय यह मुश्किल हो जाता है। एक सॉर्टेडलिस्ट अचानक उस सूची में तत्व को वापस नहीं ढूंढ सकता जो वास्तव में मौजूद है। इसे नियंत्रित करना भी मुश्किल है, .NET ढांचे के दौरान बहुत सारे थ्रेडपूल थ्रेड कॉलबैक।
इस तरह के जाल में गिरने से बचने के लिए इसके साथ गड़बड़ न करें, या तो सिस्टम डिफ़ॉल्ट पर भरोसा करें या स्पष्ट रूप से CultureInfo लागू करें।
अद्यतन: के रूप में थॉमस द्वारा बताया गया है, एक समाधान .NET 4.5 में उपलब्ध हो जाएगा, यह appdomain के डिफ़ॉल्ट संस्कृति स्थापित करने के लिए CultureInfo वर्ग के लिए एक नया संपत्ति है। एमएसडीएन दस्तावेज़ are here। प्रबंधित कोड दर्ज करने वाले अप्रबंधित धागे के साथ सटीक बातचीत दस्तावेज़ से बहुत स्पष्ट नहीं है, अगर आप कभी देशी कोड को कॉलबैक बनाने की अनुमति देते हैं, जैसे कि पिनवोक, मार्शल.गेटफंक्शनशनइंटरफॉरडिलेगेट() या COM ऑब्जेक्ट की घटना के माध्यम से।
UPDATE2: इस .NET 4.6 में फिर से बदल कर, संस्कृति अब एक धागे से एक और तो nastiest विफलता मोड का ध्यान रखा जाता करने के लिए बहती है। CultureInfo.CurrentCulture के लिए एमएसडीएन आलेख में इसके बारे में विवरण पढ़ें। लाभ प्राप्त करने के लिए आपको 4.6 को स्पष्ट रूप से लक्षित करना होगा।
आपको लगता है कि धागे और स्वचालित रूप से संस्कृति की स्थापना की सक्रिय कर देगा एक कस्टम विधि हो सकता है:
static bool StartThread(WaitCallback callback, object state)
{
return ThreadPool.QueueUserWorkItem(s =>
{
// Set the culture
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
// invoke the callback
callback(s);
}, state);
}
और जब आप एक नया धागा शुरू करने की आवश्यकता बस इस विधि का उपयोग:
StartThread(state => { /** Do some processing on a new thread **/ }, null);
अच्छा समाधान ... लेकिन यह लक्ष्य से चूक - मैं कुछ सेट हो जाएगा कि जरूरत संस्कृति जब भी मैं इसे सेट करना भूल जाता हूं। अगर मैं 'स्टार्ट थ्रेड' विधि के माध्यम से थ्रेड शुरू करना भूल जाता हूं तो वही हो सकता है। मैं चाहता हूं कि सभी थ्रेड अपने संस्कृति को स्वचालित रूप से – Nissim
प्राप्त करें। क्या आप मुझे ऐसा करने के लिए स्निपेट दिखा सकते हैं? – Nissim
4.5 डिफ़ॉल्ट एप्लिकेशन डोमेन संस्कृतियों के लिए CultureInfo
वर्ग के माध्यम से सेट किया जा सकता है:
यह नया सही उत्तर है। – Gleno
- 1. पूरे समाधान के लिए वर्तमान संस्कृति सेट करना
- 2. एपडोमेन
- 3. एपडोमेन
- 4. पूरे असेंबली के लिए स्टेटिक कन्स्ट्रक्टर
- 5. वर्तमान संस्कृति
- 6. मैं पूरे आवेदन के लिए स्थानीयकरण संस्कृति को अमेरिका में कैसे मजबूर कर सकता हूं
- 7. .NET - संस्कृति से संस्कृति का नाम प्राप्त करें
- 8. htmlentities के लिए डिफ़ॉल्ट वर्णसेट परिभाषित करें()
- 9. प्रक्रिया। स्टार्ट निर्दिष्ट करें संस्कृति
- 10. सी # पृष्ठभूमिवर्कर की संस्कृति
- 11. ग्राफवीज़: पूरे ग्राफ के लिए फ़ॉन्ट बदलें?
- 12. एपडोमेन में log4net
- 13. ग्राहक विशिष्ट शब्दकोष के लिए कस्टम संस्कृति?
- 14. निर्दिष्ट संस्कृति या तटस्थ संस्कृति के लिए कोई संसाधन नहीं मिला
- 15. पूरे आवेदन के लिए CurrentCulture सेट करने का आसान तरीका?
- 16. स्ट्रिंग संस्कृति
- 17. एपडोमेन रीसायकल को सिमुलेट करना
- 18. मॉड्यूल के लिए रिकर्सिव हस्ताक्षर परिभाषित करें
- 19. विशिष्ट संस्कृति मुद्रा पैटर्न कैसे प्राप्त करें
- 20. मुद्रा को वर्तमान संस्कृति से प्राप्त करें?
- 21. पूरे आईफोन/आईपैड ऐप के लिए पृष्ठभूमि छवि सेट करें
- 22. पूरे आवेदन में उपयोग के लिए Thread.CurrentPrincipal कैसे सेट करें?
- 23. एंड्रॉइड में पूरे एप्लिकेशन के लिए पृष्ठभूमि कैसे सेट करें?
- 24. जावा इनवेरिएंट संस्कृति के समतुल्य
- 25. "रीसेट" करने के लिए पूरे बफर
- 26. संस्कृति को दिनांक दिनांक में बदलने के लिए .Net
- 27. एचटीएमएल पूरे पृष्ठ के लिए उपकरण के लिए उपकरण?
- 28. डब्ल्यूपीएफ: पूरे सीमा क्लिक करें
- 29. PHP preg_match पूरे शब्द खोजने के लिए
- 30. पूरे पृष्ठ के लिए माउस कर्सर बदलें?
[इस पृष्ठ] के अनुसार (http://msdn.microsoft.com/en-us/library/ms171868%28v=vs.110%29।एएसपीएक्स), यह .NET 4.5 में संभव होगा: "अनुप्रयोग डोमेन के लिए संस्कृति को परिभाषित करने की क्षमता"। हालांकि मुझे यह नहीं पता था कि इसे कैसे किया जाए ... मैं ऐपडोमेन या ऐपडोमेनसेटअप –
@ थॉमस में कोई प्रासंगिक प्रॉपर्टी नहीं देख सकता: वाल्डीस [उत्तर] देखें (http://stackoverflow.com/a/8030336/107604) नीचे। –