2010-10-07 2 views
5

का उपयोग करके बनाए गए AddIns का निपटान करें क्या कोई जानता है कि सिस्टम का उपयोग करके बनाए गए AddIns का निपटान कैसे करें। AddIn। ऑनलाइन सभी उदाहरण दिखाते हैं कि कैसे आसानी से लोड करना और एक एडिन का उपयोग करना है, लेकिन कोई भी दिखाता है कि जीवित होने के बाद उनका निपटान कैसे किया जाए। मेरी समस्या यह है कि मैं नई प्रक्रियाओं में एडिन बना देता हूं, और इन प्रक्रियाओं को कचरा कभी नहीं मिला, जाहिर है कि एक समस्या है।MAF (System.AddIn)

नीचे मेरी समस्या का वर्णन करने वाला कुछ नमूना कोड है। मान लें कि उपयोगकर्ता कभी भी इस एप्लिकेशन से बाहर नहीं निकलता है, बल्कि इसके बजाय आईसील्यूलेटर के कई उदाहरण बनाता है। इन addIn प्रक्रियाओं का निपटान कैसे किया जाता है?

static void Main(string[] args) 
    { 
     string addInRoot = GetExecutingDirectory(); 

     // Update the cache files of the pipeline segments and add-ins 
     string[] warnings = AddInStore.Update(addInRoot); 

     // search for add-ins of type ICalculator 
     Collection<AddInToken> tokens = AddInStore.FindAddIns(typeof(ICalculatorHost), addInRoot); 

     string line = Console.ReadLine(); 
     while (true) 
     { 
      AddInToken calcToken = ChooseCalculator(tokens); 

      AddInProcess addInProcess = new AddInProcess(); 
      ICalculatorHost calc = calcToken.Activate<ICalculatorHost>(addInProcess, AddInSecurityLevel.Internet); 

      // run the add-in 
      RunCalculator(calc);  
     } 
    } 
+0

ओह, कुछ अतिरिक्त जानकारी। मैं अपने HostViewAdapter क्लास में अनुबंध हैंडल का संदर्भ भी रख रहा हूं, जो अभी भी चाल नहीं लग रहा है। –

उत्तर

9

मैं ऊपर समस्या का समाधान खोजने में कामयाब रहे, यह AddInController वर्ग का इस्तेमाल कर रही है और यह बंद विधि है। अब अगर मैं इस अपने आवेदन में काम करने के लिए प्राप्त कर सकते हैं देखने के लिए ही नहीं, इस उदाहरण:

static void Main(string[] args) 
    { 
     string addInRoot = GetExecutingDirectory(); 
     string[] warnings = AddInStore.Update(addInRoot); 
     Collection<AddInToken> tokens = AddInStore.FindAddIns(typeof(ICalculatorHost), addInRoot); 


     while (true) 
     { 
      AddInToken calcToken = ChooseCalculator(tokens); 

      AddInProcess addInProcess = new AddInProcess(); 
      ICalculatorHost calc = calcToken.Activate<ICalculatorHost>(addInProcess, AddInSecurityLevel.Internet); 

      // run the add-in 
      RunCalculator(calc); 

      // shutdown the add-in when the RunCalculator method finishes executing 
      AddInController controller = AddInController.GetAddInController(calc); 
      controller.Shutdown(); 
     } 
    } 
+2

+1 अपने स्वयं के समाधान की रिपोर्ट करने के लिए +1। एसओ की भावना में बहुत ज्यादा। – spender

+2

धन्यवाद, मैंने सोचा कि मैं अपने साथी डेवलपर्स को दर्द –

+2

बचाऊंगा "मैंने सोचा था कि मैं अपने साथी डेवलपर्स को दर्द बचाऊंगा" - और सिस्टम के साथ बहुत दर्द है। जोड़ें .... –

0

अपने समाधान मेरे लिए काम नहीं किया।

आप अपने ऐड के लिए एक नई प्रक्रिया पैदा कर रहे के बाद से आप कर सकते हैं बस

addInProcess.Shutdown(); 

बाहरी प्रक्रिया इच्छा बंद