मेरे पास समूह में कुछ चेकबॉक्स हैं और निम्नलिखित ईवेंट हैंडलर और संबंधित विधि है।
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 उत्तर
क्या आप सुनिश्चित हैं कि फ़िल्टर विधि केवल चेक किए गए चेंज से ही कॉल की जाती है? कुछ इस तरह का प्रयास करें
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}");
// ....
}
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।