AJAX

2012-10-31 9 views
7

के साथ ASP.NET में पृष्ठभूमि कार्यकर्ता का उपयोग करना मुझे पृष्ठभूमि कार्य करने की आवश्यकता है जिसमें प्रगति पट्टी है जो प्रतिशत दिखाता है और रद्द बटन दिखाता है। कार्य विनिर्देश अलग-अलग हैं, अभी के लिए, मैं सिर्फ एक उदाहरण काम करना चाहता हूं, इसलिए मेरे पास केवल तीन मुख्य ईवेंट हैंडलर (DoWork, प्रोग्रेस चेंज, और रनवॉर्कर पूर्ण) और एक लूप है जो सिर्फ काउंटर को बढ़ाता है और DoWork में 50ms के लिए सोता है। हालांकि, यह अंत में एक बार छोड़कर अद्यतन नहीं करता है।AJAX

विंडोज़ फॉर्म में मैं पृष्ठभूमि कार्यकर्ता का उपयोग करता हूं और यह बिना किसी समस्या के सही ढंग से कार्य करता है। मैं सिर्फ उसी कोड का उपयोग करना चाहता हूं। हालांकि, मैं सामान देख रहा हूं जो कहता है कि एएसपी.नेट को समान कार्यक्षमता प्राप्त करने के लिए AJAX का उपयोग करना चाहिए। तो मेरे प्रश्न हैं:

1) क्या मुझे पृष्ठभूमि कार्यकर्ता का उपयोग करने के लिए वास्तव में AJAX की आवश्यकता है?

2) हाँ, मैं जरूरत AJAX करते हैं, तो सबसे आसान, सबसे आसान तरीका है एक व्यक्ति के बारे में है कि AJAX पृष्ठभूमि कार्यकर्ता अप और एक एएसपी पर चलाने के लिए कर सकता है एक रफ़ू बात पता नहीं है क्या है। नेट वेबपेज?

3) यदि कोई नहीं है, तो मुझे AJAX की आवश्यकता नहीं है, क्या कोई मुझे ऐसे कामकाजी नमूने पर इंगित कर सकता है जो इसका उपयोग नहीं करता है? मुझे दिलचस्पी है भले ही यह पृष्ठभूमि श्रमिकों की तुलना में कुछ अन्य थ्रेडिंग विधि का उपयोग करे।

बहु-भाग प्रश्न के लिए खेद है! यदि आप एक या दूसरे का जवाब दे सकते हैं, तो इसकी सराहना की जाएगी। मुझे वास्तव में यह नहीं लगता कि जब तक यह काम करता है तब तक मैं किस विधि का उपयोग करता हूं। .cs पेज से संदर्भ के लिए

कोड:

protected void bwProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    lblProgress.Text = "Task Complete: " + e.Result; 
} 

protected void bwProcess_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    lblProgress.Text = e.ProgressPercentage.ToString(); 
} 

protected void bwProcess_DoWork(object sender, DoWorkEventArgs e) 
{ 
    for (int i = 0; i <= 100; i++) 
    { 
     if (bwProcess.CancellationPending) 
     { 
      lblProgress.Text = "Task Cancelled."; 
      e.Cancel = true; 
      return; 
     } 
     bwProcess.ReportProgress(i); 
     Thread.Sleep(50); 
    } 
    e.Result = "100%"; 
} 

protected void BWClick(object sender, EventArgs e) 
{ 
    lblProgress.Text = "Firing Process..."; 
    bwProcess = new BackgroundWorker(); 
    bwProcess.WorkerReportsProgress = true; 
    bwProcess.WorkerSupportsCancellation = true; 
    bwProcess.DoWork += new DoWorkEventHandler(bwProcess_DoWork); 
    bwProcess.ProgressChanged += new ProgressChangedEventHandler(bwProcess_ProgressChanged); 
    bwProcess.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwProcess_RunWorkerCompleted); 

    if (bwProcess != null) 
    { 
     bwProcess.RunWorkerAsync("StartAsynchronousProcess"); 
    } 
} 

अन्य नोट: मैं Async = "सही" और EnableSessionState = "ReadOnly" @Page में प्रवेश किया है।

अग्रिम धन्यवाद!

+0

देखें http://stackoverflow.com/questions/57845/backgroundworker-thread-in-asp-net – Despertar

+0

http://msdn.microsoft.com/en-us/library/ms178210%28v=vs.85% 29.aspx एक अद्यतित संस्करण है।यह सुनिश्चित करें कि इसे प्रगति पट्टी में कैसे अनुकूलित किया जाए, लेकिन मुझे लगता है कि मैं धीरे-धीरे करीब आ रहा हूं। – Brandi

उत्तर

4

वेब प्रोग्रामिंग ऑफ़र कई चुनौतियां जो डेस्कटॉप प्रोग्रामिंग के दौरान दी जाने वाली आसान हैं। एक से दूसरे में जाने से कई बदलावों की आवश्यकता हो सकती है। लंबे समय से चलने वाले थ्रेडों को फैलाना उन चीजों में से एक है जिन्हें नुकसान से बचने के लिए और अधिक देखभाल की आवश्यकता होती है। एप्लिकेशन पूल को आपके द्वारा उत्पन्न होने वाले थ्रेडों के बारे में पता नहीं है, इसलिए यह उन थ्रेडों को मार देगा जो आपके आवेदन में अप्रत्याशित व्यवहार करते हैं। इस पोस्ट को इसके बारे में अधिक जानने के लिए, Can I use threads to carry out long-running jobs on IIS?

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


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

function getProgress() { 
    $.ajax({ 
     url: '/progress',   // send HTTP-GET to /progress page 
     dataType: 'json',   // return format will be JSON 
     success: function(result) { // function to run once the result is pulled 
      $("#p1").html('Percentage: %' + result); 
      if (result == "100") 
       clearInterval(window.progressID); 
     } 
    }); 
} 

function startGetProgress() { 
    window.progressID = setInterval(getProgress, 10000); // update progress every 10 seconds 
} 

ऊपर के उदाहरण का उपयोग करता है JQuery ajax विधि, http://api.jquery.com/jQuery.ajax/ ताकि आप JQuery पुस्तकालय को संदर्भित करने की आवश्यकता होगी।

चाहे आप वेबफॉर्म या एमवीसी का उपयोग कर रहे हों, आप AJAX अनुरोध को संभालने के लिए एक वेब एपीआई नियंत्रक जोड़ सकते हैं। अगर आपको कुछ भी स्पष्ट करने की ज़रूरत है तो मुझे बताएं।

+0

धन्यवाद - क्या एक निराशाजनक बात है! – Brandi

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