मेरे पास समूह में कुछ चेकबॉक्स हैं और निम्नलिखित ईवेंट हैंडलर और संबंधित विधि है।

public async void CheckedChanged(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine($"Calling CheckedChanged {s.Name}: {s.CheckState}");
    await Filter();
}

public async Task Filter()
{
    System.Diagnostics.Debug.WriteLine($"Calling Filter");
    // ....
}

हालांकि, निम्न डिबग आउटपुट से पता चलता है कि चेकबॉक्स के प्रत्येक राज्य परिवर्तन के लिए Filter को दो बार कॉल किया गया था।

Calling CheckedChanged CheckBox1: Checked
Calling Filter 
Calling Filter
Calling CheckedChanged CheckBox1: Unchecked
Calling Filter
Calling Filter 

विधि Filter में कुछ बहुत महंगी डेटाबेस कॉल हैं और SQL प्रोफाइलर दिखाता है कि इन कॉलों को दो बार भी बुलाया जाता है।


यह पता चला है कि विधि Filter को Task.Run(...) में बुलाया गया था और डीबगर को कॉलर नहीं मिल सका। स्वीकृत उत्तर ने इसे खोजने में मदद की।

-1
ca9163d9 15 नवम्बर 2018, 20:38

1 उत्तर

सबसे बढ़िया उत्तर

क्या आप सुनिश्चित हैं कि फ़िल्टर विधि केवल चेक किए गए चेंज से ही कॉल की जाती है? कुछ इस तरह का प्रयास करें

    public async void CheckedChanged(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine($"Calling CheckedChanged {s.Name}: {s.CheckState}");
    await Filter(nameof("CheckedChanged"));
}

public async Task Filter(string caller = "undefined")
{
    System.Diagnostics.Debug.WriteLine($"Calling Filter from {caller}");
    // ....
}
1
RSadocchi 15 नवम्बर 2018, 17:47