यह कोई थ्रेडिंग समस्या नहीं है, लेकिन एक वेब ब्राउज़र UI समस्या है। आप ब्राउज़र पर स्थिति प्रस्तुत करना चाहते हैं क्योंकि आप सर्वर पर काम कर रहे हैं। सिद्धांत रूप में आप की तरह कुछ कर सकता है:
Response.Write("something");
Response.Flush();
लेकिन Flush()
सुनिश्चित नहीं होंगे ब्राउज़र वास्तव में उस समय आपके कोड बना देता है। हकीकत में आप इस बात को नियंत्रित नहीं कर सकते कि कैसे सर्वर से ब्राउज़र में कैश/चंक/बफर किया जाता है। तो प्रत्येक अद्यतन एक 'पूर्ण' http लेनदेन होना चाहिए।
एक तरीका, और आम एक, यह प्राप्त करने के लिए AJAX का उपयोग करना है। उपयोगकर्ता एक बटन पर क्लिक करता है जो कुछ पृष्ठभूमि कार्य शुरू करता है, और आपके पास जावास्क्रिप्ट टाइमर होता है जो काम की स्थिति की जांच करने के लिए मतदान करता है (अनुरोध करता है) और क्लाइंट ब्राउज़र अपडेट करता है।
AJAX और .NET के साथ AJAX प्रगति संकेतक करने के लिए Real-Time Progress Bar With ASP.NET AJAX देखें।
इस लेख में एक http हैंडलर के साथ एक प्रगति बार बनाने का एक उत्कृष्ट उदाहरण है: http://www.asp101.com/articles/matt/progressbar/default.asp
आईई या क्रोम में, निम्न कोड फ़ायरफ़ॉक्स में काम करता है, मेरी बात साबित नहीं बल्कि करने के लिए:
protected void Page_Load(object sender, EventArgs e)
{
Response.Buffer = false;
Response.Clear();
Response.Write("<html><body>");
Response.Write("1\n");
Response.Flush();
Thread.Sleep(2000);
Response.Write("1\n");
Response.Flush();
Thread.Sleep(2000);
Response.Write("1\n");
Response.Flush();
Thread.Sleep(2000);
Response.Write("1\n");
Response.Flush();
Response.Write("</body></html>");
Response.End();
}
स्रोत
2010-03-27 20:59:26
मैंने वास्तव में साफ-सुथरा तरीका देखा है जो पहले धागे का उपयोग करता था ... बस याद नहीं किया जा सकता है, और यह कैसे करें। यह मूल रूप से एक विधि चल रहा है, और हर बार, अगली प्रगति संदेश प्रदर्शित होता है – Danny
आपका काम उस थ्रेड पर निष्पादित होगा जो इसकी प्रगति स्थिति को अद्यतन करता है। फिर आपका ग्राहक राज्य के लिए मतदान करेगा। लेकिन जैसा कि मैंने उल्लेख किया है, आप सिद्धांत में काम को थ्रेड में बंद कर सकते हैं और Response.Write और Response.Flush के साथ प्रगति लिख सकते हैं, लेकिन आपको गारंटी नहीं है कि यह वास्तव में ब्राउज़र पर फंस गया है और पूरे अनुरोध को पूरा करने से पहले प्रस्तुत किया गया है। –
मुझे नहीं लगता कि Response.Write धागे में काम करता है। हालांकि, मैंने जो आइटम पहले देखा था उस पर कुछ वापस आ रहा है, और मुझे लगता है कि यह स्थिति क्लाइंट पक्ष को पूल करने के लिए AJAX का उपयोग कर सकता है। – Danny