खोज…


सरल प्रगति रिपोर्टिंग

IProgress<T> का उपयोग किसी प्रक्रिया की प्रगति को किसी अन्य प्रक्रिया को रिपोर्ट करने के लिए किया जा सकता है। यह उदाहरण दिखाता है कि आप एक मूल विधि कैसे बना सकते हैं जो इसकी प्रगति की रिपोर्ट करती है।

void Main()
{
    IProgress<int> p = new Progress<int>(progress =>
    {
        Console.WriteLine("Running Step: {0}", progress);
    });
    LongJob(p);
}

public void LongJob(IProgress<int> progress)
{
    var max = 10;
    for (int i = 0; i < max; i++)
    {
        progress.Report(i);
    }
}

आउटपुट:

Running Step: 0
Running Step: 3
Running Step: 4
Running Step: 5
Running Step: 6
Running Step: 7
Running Step: 8
Running Step: 9
Running Step: 2
Running Step: 1

ध्यान दें कि जब आप यह कोड चलाते हैं, तो आप देख सकते हैं कि संख्याएँ आउट ऑफ़ ऑर्डर हो सकती हैं। ऐसा इसलिए है क्योंकि IProgress<T>.Report() पद्धति अतुल्यकालिक रूप से चलाई जाती है, और इसलिए उन स्थितियों के लिए उपयुक्त नहीं है जहां प्रगति क्रम में रिपोर्ट की जानी चाहिए।

IProgress का उपयोग करना

यह नोट करना महत्वपूर्ण है कि System.Progress<T> वर्ग के पास इस पर Report() विधि उपलब्ध नहीं है। इस विधि को स्पष्ट रूप से IProgress<T> इंटरफ़ेस से लागू किया गया था, और इसलिए इसे एक Progress<T> पर बुलाया जाना चाहिए जब इसे IProgress<T> डाला जाता है।

var p1 = new Progress<int>();
p1.Report(1); //compiler error, Progress does not contain method 'Report'

IProgress<int> p2 = new Progress<int>();
p2.Report(2); //works

var p3 = new Progress<int>();
((IProgress<int>)p3).Report(3); //works


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow