multithreading - c# hight memory used. for ManagementObjectSearcher -


  निजी शून्य फॉर्म 1_लोड (ऑब्जेक्ट प्रेषक, EventArgs ई) {t = नया थ्रेड (नया थ्रेडस्टार्ट (सीरियलकेक)); CheckForIllegalCrossThreadCalls = गलत; t.Start (); } सार्वजनिक शून्य सीरियलसीक () {ManagementObjectSearcher theSearcher = नया प्रबंधनऑब्जेक्ट सर्चर ("सेलेक्ट * FROM Win32_DiskDrive WHERE इंटरफ़ेस टाइप = 'यूएसबी'"); {Foreach (SearchContent in ManagementObject currentObject.Get ()) {managementObject theSerialNumberObjectQuery = नया प्रबंधनऑब्जेक्ट ("Win32_PhysicalMedia.Tag = '" + currentObject ["DeviceID"] + "' '') की कोशिश करें; {Serial = theSerialNumberObjectQuery ["SerialNumber"] की कोशिश करो। ToString (); Textbox1.Text = सीरियल; } पकड़ (अपवाद) {// MessageBox.Show ("बिशेलर बूंडू बेंडे एलामेडम"); }} थ्रेड। नींद (यकीन है); serialcek (); } पकड़ (अपवाद पूर्व) {संदेश बॉक्स। शो ("Patladım ben।" + Ex.Message.ToString ()); }}  

थ्रेड का उपयोग करें लेकिन मैं इसे रोक नहीं सकता धागा हमेशा चलने और आवेदन उच्च स्मृति इस्तेमाल किया कुछ मिनट बाद में एक त्रुटि दे। शायद मैं फ़ंक्शन के लिए सही नहीं इस्तेमाल कर सकता हूं।

ऐसा इसलिए है क्योंकि आप थ्रेड की विधि बिना किसी बाहर निकलने पर कॉल करते हैं शर्त। इससे अंततः StackOverflowException हो जाएगा।

इस दृष्टिकोण के बजाय आपको थ्रेड की विधि के अंदर एक जबकि लूप रखना चाहिए। यह निश्चित रूप से लागू किया जाता है, बस आपको यह विचार देना है:

  bool exitThread; निजी शून्य फॉर्म 1_लोड (ऑब्जेक्ट प्रेषक, इवेंटएआरजीएस ई) {टी = नया थ्रेड (नया थ्रेडस्टार्ट (सीरियलकेक)); CheckForIllegalCrossThreadCalls = गलत; ExitThread = false; t.Start (); } सार्वजनिक शून्य सीरियलसीक () {ManagementObjectSearcher theSearcher = नया प्रबंधनऑब्जेक्ट सर्चर ("सेलेक्ट * FROM Win32_DiskDrive WHERE इंटरफ़ेस टाइप = 'यूएसबी'"); जबकि (! ExitThread) {{foreach (खोजकर्ता में वर्तमान में प्रबंधन ऑब्जेक्ट)। (प्रबंधन) (प्रबंधन ऑब्जेक्ट theSerialNumberObjectQuery = नया प्रबंधनऑब्जेक्ट ("Win32_PhysicalMedia.Tag = '" + वर्तमान ओब्जेक्ट ["DeviceID"] + "' '); {Serial = theSerialNumberObjectQuery ["SerialNumber"] की कोशिश करो। ToString (); Textbox1.Text = सीरियल; } पकड़ (अपवाद) {// MessageBox.Show ("बिशेलर बूंडू बेंडे एलामेडम"); }}} पकड़ (अपवाद पूर्व) {संदेश बॉक्स। शो ("Patladım ben।" + पूर्व। संदेश। टॉस्ट्रिंग ()); } अंत में {// मूव स्लीप इन 'आखिरकार' ब्लॉक को इसे बुलाया जा सकता है, भले ही एक अपवाद तब होता है जब सोचा होता है। नींद (यकीन है); }}  

और फिर आप केवल true को exitThread से निर्दिष्ट करके इस थ्रेड से बाहर निकल सकते हैं :

  निजी शून्य बटन 1_Click (ऑब्जेक्ट प्रेषक, EventArgs ई) {exitThread = true; }  

Comments

Popular posts from this blog

c++ - C/pp Sockets, recv()/send() works only under gdb -

GO: Serve static pages -

objective c - How to open front/back camera at the same time in iOS developing? -