2011-08-11 17 views
5

मैं एक ऐप बना रहा हूं जिसमें फोरग्राउंड ऐप (ज़ाहिर है) और एक आवधिक टास्क और एक संसाधन इंटरेन्स्ट टास्क।विंडोज फोन पर एक अग्रभूमि ऐप से अनुसूचित कार्य को कैसे सिग्नल करें?

यदि उपयोगकर्ता चल रहे हैं तो उपयोगकर्ता स्वयं ऐप लॉन्च करता है तो मुझे निर्धारित कार्यों को बंद करने का एक तरीका चाहिए।

मुझे सिस्टम-व्यापी म्यूटेक्स के साथ ऐसा करने का कोई तरीका नहीं दिख रहा है। आदर्श रूप से जब पृष्ठभूमि कार्य शुरू हुआ, तो एक धागा फेंक दिया जाएगा जो अग्रभूमि ऐप से सिग्नल के लिए सुनता है, और यदि यह संकेत मिलता है तो यह पृष्ठभूमि कार्य को बंद कर सकता है।

मतदान के अलावा (जैसे कि एक विशिष्ट फ़ाइल के लिए एक फ़ोल्डर), किसी को कैसे मेरे अग्रभूमि एप्लिकेशन मेरी पृष्ठभूमि एजेंटों संकेत को बंद करने का अगर अग्रभूमि एप्लिकेशन शुरू की है सकते हैं पर एक साफ सुझाव है?

मैं सॉकेट की ओर बढ़ रहा हूं, लेकिन यह ओवरकिल जैसा लगता है।

पृष्ठभूमि: मैं वर्तमान में IsolatedStorage उपयोग कर रहा हूँ मेरे डेटा (एक डेटाबेस नहीं) स्टोर करने के लिए - अंत में मैं एक डेटाबेस का उपयोग करने के लिए ले जाया जाएगा।

मेरा अग्रभूमि ऐप स्थानीय डेटा को वेब सेवा के साथ सिंक्रनाइज़ करता है, और वेब सेवा से नए आइटम जोड़े जाने पर UI को अपडेट करता है। मैं एक फ़ाइल का उपयोग करता हूं जिसे मैं डेटा आइटम ढूंढने के लिए खोजता हूं, और जिसे मैं जोड़ता हूं क्योंकि नए आइटम सिंक हो जाते हैं।

मैं चाहता हूं कि पृष्ठभूमि एजेंट पृष्ठभूमि में इस सिंक्रनाइज़ेशन को निष्पादित करने के लिए चलें, अलग-अलग स्टोरेज में फ़ाइलों को अद्यतन करना, इंडेक्स सहित इत्यादि। लेकिन जैसे ही मैं अग्रभूमि ऐप शुरू करता हूं, मुझे पृष्ठभूमि ऐप को रोकने की आवश्यकता होती है, इसलिए कि अग्रभूमि और पृष्ठभूमि दोनों एक ही समय में एक ही फाइल को अद्यतन करने का प्रयास नहीं करते हैं।

मुझे एक समय में स्थानीय डेटा को अपडेट करने के लिए केवल एक प्रक्रिया की आवश्यकता है, और पृष्ठभूमि प्रक्रिया को पूर्ववत करने के लिए मुझे अग्रभूमि प्रक्रिया की आवश्यकता है।

+0

मैं एप्लिकेशन के रूप में एक ही समय में चलाने के लिए सक्षम होने के लिए अपने एजेंट डिजाइन करने के लिए धक्का होगा। यदि आपके पास कुछ ऐसा अच्छा उदाहरण है जिसका अर्थ है कि यह संभव नहीं हो सकता है तो मुझे इसे सुनना होगा। –

+0

मैंने कुछ पृष्ठभूमि जानकारी जोड़ा है। अनिवार्य रूप से मेरे पास एक ही फाइल को एक ही समय में संशोधित करने की प्रक्रिया नहीं हो सकती है, और मैं चाहता हूं कि अग्रभूमि प्रक्रिया पृष्ठभूमि प्रक्रिया को पूर्ववत करे। – Damian

उत्तर

5

नहीं समवर्ती अद्यतन समाधान:

आवेदन (App()):

var m = new Mutex(false, "MyMutex"); 
m.WaitOne(); //When PeriodicTask runs wait 

if(lastSynchronization > 1.Minutes) 
{ 
    //Update only when your PeriodicTask not runs before 
} 

//ApplicationExit  
m.ReleaseMutex(); 

PeriodicTask (मुख्य धागा):

var m = new Mutex(false, "MyMutex"); 
if(m.WaitOne(0)) // Dont wait for the handle 
{ 
    // Synchronization 

    m.ReleaseMutex(); 
} 
else 
{ 
    //Abort task (You dont want to wait for the main application) 
} 

बंद करो PeriodicTask जब आवेदन समाधान शुरू होता है:

आवेदन (App()):

var m = new Mutex(false, "MyMutex"); 
m.WaitOne(); 

// Application  

m.ReleaseMutex(); 

PeriodicTask (अलग धागा):

var m = new Mutex(false, "MyMutex"); 

while (m.WaitOne(0)) // Check for main application 
{ 
    m.ReleaseMutex(); 
} 

// Abort task 

मैं WP7 में उपलब्ध सदस्यों के साथ सबसे अच्छा समाधान लगता है कि thats :

http://msdn.microsoft.com/en-us/library/system.threading.mutex(v=VS.96).aspx

+0

मैं चाहता हूं कि मेरा अग्रभूमि ऐप मेरे आवधिक कार्य को सिग्नल करे - आवधिक कार्य पहले ही चल रहा है। पारस्परिक बहिष्कार प्राप्त करना म्यूटेक्स के साथ सरल है, लेकिन सिग्नलिंग ... मुझे इतना यकीन नहीं है। – Damian

+0

जब आपका एप्लिकेशन शुरू होता है तो यह हैंडल प्राप्त करेगा और फिर आपका आवधिक टास्क अब हैंडल हासिल नहीं कर सकता है और जबकि लूप छोड़ देगा। स्पष्ट? – Skomski

+0

तो क्या आपके पास ताला लूप लगातार लॉक प्राप्त करना और इसे जारी करना है? यह सीपीयू खाएगा, नहीं? – Damian

3

आप नामांकित घटनाओं के माध्यम से इंटरप्रोसेस संचार का उपयोग कर सकते हैं।

जैसे ही आप अपना अग्रभूमि ऐप खोलते हैं, आप अपने पृष्ठभूमि एजेंट को संकेत दे सकते हैं।

http://blogs.windows.com/buildingapps/2013/03/27/using-named-events-to-coordinate-foreground-apps-and-background-agents/

+0

धन्यवाद - AFAIK जो मूल रूप से प्रश्न पूछने पर उपलब्ध नहीं था, लेकिन अब के लिए जानना अच्छा है। – Damian

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