2011-06-15 15 views
12

मुझे कोई समस्या है। मेरे पास थ्रेड का उपयोग कर एक वीसीएल एप्लीकेशन है। यह थ्रेड कुछ गणना करता है और सिंक्रनाइज़() के माध्यम से मेनफॉर्म की विधि को कॉल करता है। यह सब ठीक काम करता है, मेरे पास "स्टार्ट" बटन है, जो थ्रेड बनाता है और एक "स्टॉप" बटन चलाता है जो इसे रोकता है और उसे मुक्त करता है। कोई त्रुटि नहीं, कुछ भी नहीं।"EOSError 1400 - अवैध विंडो हैंडल" के संभावित कारण

लेकिन किसी कारण से जब मैं एप्लिकेशन बंद करता हूं और मैंने धागा चलाया है तो मुझे EOSError 1400 - Invalid window handle मिलता है। मैंने ऑनक्लोज़ प्रक्रिया को तोड़ दिया है और केवल एक चीज जो मैं करता हूं, एक आईएनआई फाइल सहेज रही है, उसमें कोई त्रुटि नहीं है, जब मैं आगे का पता लगाता हूं (एफ 7 का उपयोग करके), end. "कॉलिंग" के बाद, मैं बहुत अंत (Application.Run; end.) पर जाता हूं मुझे त्रुटि मिलती है, इसलिए कोड को बढ़ाने के लिए कोई विशिष्ट पंक्ति नहीं है।

मुझे उम्मीद है कि प्रश्न कुछ हद तक स्पष्ट है और मुझे उम्मीद है कि यह हल करने योग्य है, क्योंकि केवल त्रुटि को अनदेखा करना थोड़ा अशुद्ध लगता है।

धन्यवाद inb4


उत्तर

यह त्रुटि मेरे लिए हुई जब निष्पादित एक धागा की विधि कहा जाता था, इसे इस तरह देखा:

procedure TRunThread.Execute; 
var (...) 
begin 
    while not Terminated do begin 
    (...) 
    MainForm.Memo1.Lines.Add('Some text'); // Even though this call worked fine during 
    //the application running, it caused errors on shutting the app down. 
    // For acccessing GUI elements, it's necessary to use Synchronize() 
    (...) 
    end; 
end; 
+1

क्या आप सुनिश्चित हैं कि आपका बिंदु अब इस बिंदु पर नहीं चल रहा है ("एप्लिकेशन.रुन के अंत में")? – gabr

+0

मैं हूं। चाहे थ्रेड चल रहा हो या नहीं, मैं एप्लिकेशन को बंद कर दूं, मुझे यह त्रुटि मिलती है। _ हाँ, और मैं "-1" के लायक क्या था? मैंने अपनी समस्या का वर्णन करने की कोशिश की और साथ ही मैं कर सकता था ._ –

+4

क्यों डाउनवोट? यह एक दयालु और वैध सवाल है। मैंने इसे डाउनवोट के लिए तैयार करने के लिए वोट दिया। ये अन्यायपूर्ण डाउनवॉट हाल ही में नियंत्रण से बाहर हो रहे हैं: -/ – jpfollenius

उत्तर

12

एक संभावित कारण धागे से जीयूआई के लिए कुछ अनसंक्रनाइज़ पहुंच है। आपने कहा कि धागा ऐसा नहीं करता है, लेकिन TRunThread.Execute स्रोत कोड को देखे बिना सबसे अच्छा अनुमान लग रहा है।

+0

मैंने दावा किया और .. गलत था। Dammit। धन्यवाद –

+0

+1 अच्छा अनुमान !! – jpfollenius

0

मुझे एक ही समस्या थी, त्रुटि कोड 5 Access is denied। यह एक थ्रेड से संबंधित एक एम्बेडेड पैनल पर इंटरनेट कनेक्शन का परीक्षण शुरू करने के लिए शुरू हुआ (BeginThread का उपयोग कर)। यदि उपयोगकर्ता फॉर्म को प्रदर्शित करने के तुरंत बाद फॉर्म (जो इंटरनेट कनेक्शन का परीक्षण कर रहा है) से बाहर निकलता है, तो एवी होता है।

मेरे विकास पीसी पर, इंटरनेट कनेक्शन परीक्षण सफल रहा ... और इतनी तेजी से मैंने कभी समस्या नहीं देखी! कई घंटों तक संघर्ष करने के बाद, मैंने अंत में इसे इस धागे पर ट्रैक किया और इसे अपने नेटवर्क केबल को डिस्कनेक्ट करके पुन: उत्पन्न किया।

समाधान सरल था: फॉर्म से बाहर निकलने पर (उदाहरण के लिए FormDestroy घटना में) सुनिश्चित करें कि थ्रेड निश्चित रूप से जारी रखने से पहले नहीं चल रहा है।

संबंधित मुद्दे