केवल एक चीज मैं मदद करने के बारे में सोच सकते हैं कि आप बनाने के लिए है में यह करने के लिए किसी भी व्यावहारिक तरीका है अपने दावा है उनके शरीर में #if DEBUG
उपयोग करती हैं इसलिए कि रिलीज पर विधियां खाली हैं।
उदा।
public static void AssertUIThread()
{
#if DEBUG
//the code goes here
#endif
}
इस तरह आप विकास के दौरान जाँच कर सकते हैं अगर आप तरीकों उचित रूप से कॉल कर रहे हैं, और JIT अपने उत्पादन कोड में पूरी तरह से कॉल निकाल देंगे।
मुझे इस समय संकलन-समय पर ऐसा करने का कोई तरीका नहीं दिख रहा है, लेकिन मैं इस प्रश्न का उत्तर इस उम्मीद में कर रहा हूं कि इसका उत्तर दिया जाएगा।
संपादित करें:
अधिक मैं इसके बारे में सोचो, और अधिक मुझे लगता है कि तुम क्या आप एक कस्टम FxCop शासन के बाद संकलन का उपयोग कर करना चाहते हैं ऐसा करने में सक्षम हो सकता है। बात यह है कि ... मुझे इंट्रोस्पेक्शन एपीआई नहीं पता है जो FxCop प्रदान करता है, और यह अच्छी तरह से प्रलेखित नहीं है। या बल्कि, यह बिल्कुल दस्तावेज नहीं है। सबसे अच्छा मैं आपके लिए कर सकता हूं a tutorial या two प्रदान करता है जो आपकी मदद कर सकता है या नहीं भी। मैं वर्तमान में उन्हें पढ़ने के बीच में हूं; अगर मुझे कुछ दिलचस्प लगता है, तो मैं इसे पोस्ट करूंगा।
संपादित करें 2:
AHAH! आप the caller and the callees of a method का विश्लेषण कर सकते हैं। वहां निर्दिष्ट ट्यूटोरियल का उपयोग करके विशेष रूप से उन तरीकों के लिए एक विशेषता बनाएं जिन्हें हमेशा यूआई थ्रेड से बुलाया जाना चाहिए, और अन्य तरीकों के लिए जिन्हें केवल एक अलग धागे से बुलाया जाना चाहिए। आपका कस्टम नियम इन विशेषताओं में से किसी एक के लिए जांचता है और केवल एक विधि में विशेषता होने पर ही चलता है। इसके बाद यह उस विधि के कॉलर्स का विश्लेषण करता है (और उनके कॉलर्स, और बहुत आगे, पुनरावर्ती) जब तक यह निर्धारित नहीं कर सकता कि कॉलर या तो यूआई थ्रेड पर या नए थ्रेड से था।
अब हम मुश्किल भाग में आ गए हैं।मैं अभी तक इस भाग को समझने में सक्षम नहीं हूं, और मैं यह देखने के लिए आपको छोड़ देता हूं कि आप किसके साथ आ सकते हैं, क्योंकि देर हो चुकी है और मैं समस्या के लिए ज्यादा समय नहीं दे सकता लेकिन मुझे बहुत दिलचस्पी है समाधान। जिस समस्या में मैं चल रहा हूं वह यह है कि धागे सभी प्रतिनिधियों का उपयोग शुरू कर रहे हैं, और मुझे लगता है कि उन प्रतिनिधियों को कॉलर श्रृंखला को आगे बढ़ाने में परेशानी होगी। मुझे नहीं पता कि से प्रतिनिधि प्राप्त करना संभव होगा; यदि यह संभव था, तो प्रतिनिधि प्रकार को ज्ञात थ्रेडिंग प्रतिनिधियों से तुलना की जा सकती है ताकि यह निर्धारित किया जा सके कि कॉल नए धागे पर किया गया था या नहीं।
भले ही यह संभव हो, प्रतिनिधि के माध्यम से जाने की समस्या होगी। यदि आप नहीं कर सकते हैं, तो आप केवल पहले प्रतिनिधि को निश्चित कर सकते हैं कि नए धागे पर कुछ है या नहीं।
तो, हल करने में समस्याएं। लेकिन, उम्मीद है कि, आपके लिए पहला कदम है।
मैंने ऐसा किया है, असल में मेरे पास सभी Assert * विधियां हैं जो एक असर विधि को कॉल करती हैं जो वास्तव में काम करती है, और उसके शरीर के आस-पास #if DEBUG है। मुझे यकीन है कि जेआईटी खाली कॉल की श्रृंखला को हटाने के लिए काफी स्मार्ट है। – Eloff
@Eloff: 'Assert' विधि' चिह्नित करें [सशर्त ("DEBUG")] '। यही वह है जो इसके लिए है;) –
@ 280z28: चीजों को करने का एक बेहतर तरीका। मैं उस बारे में भूल गया था। – Randolpho