स्टुअर्ट का उत्तर यहां सही है, लेकिन मैं अभी भी थोड़ा विस्तार करना चाहता हूं क्योंकि अभी भी कुछ भ्रम प्रतीत होता है और यह अनुप्रयोगों को डिजाइन करने के लिए एक महत्वपूर्ण अवधारणा है।
जब आप यूआई में चीजों से निपट रहे हैं, जैसे उपयोगकर्ता इनपुट का जवाब देना या जानकारी के लिए संकेत देना, तो आप कभी भी UI को अवरुद्ध नहीं करना चाहते हैं। इस प्रकार, इन स्थितियों में आपको अपने कोड को ऐसे तरीके से डिजाइन करने की आवश्यकता है जो इसे असीमित रूप से निष्पादित करने की अनुमति दे। जैसा कि आपने देखा है, आपके कोड नमूने के मामले में फ़ंक्शन तुरंत लौटाता है क्योंकि यह कॉलबैक निष्पादित होने की प्रतीक्षा नहीं करेगा। अगर यह इंतजार कर रहा था, तो यूआई थ्रेड अवरुद्ध हो जाएगा और आपका आवेदन जमे हुए होगा, जो लगभग निश्चित रूप से नहीं है जो आप चाहते हैं।
चूंकि मेरे पास इस फ़ंक्शन कॉल के लिए कोई संदर्भ नहीं है, इसलिए मैं एक साधारण उदाहरण बनाउंगा। मान लें कि आप फ़ंक्शन का रिटर्न वैल्यू प्राप्त करना चाहते हैं और इसे लॉग में लिखना चाहते हैं। तुल्यकालिक दृष्टिकोण आपके द्वारा दी गई उपयोग करना, जो कुछ इस तरह दिखेगा:
bool returnValue = test();
Console.WriteLine(returnValue);
इसके बजाय, मैं क्या कर रहा test()
विधि ऐसी है कि वह एसिंक्रोनस रूप से व्यवहार करती है पुनर्गठन है सुझाव है। मैं इसे फिर से लिखने कुछ इस तरह देखने के लिए होगा:
public void test(Action<bool> callback)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.SetTitle(Android.Resource.String.DialogAlertTitle);
builder.SetIcon(Android.Resource.Drawable.IcDialogAlert);
builder.SetMessage("message");
builder.SetPositiveButton("OK", (sender, e) =>
{
callback(true);
});
builder.SetNegativeButton("NO", (sender, e) =>
{
callback(false);
});
builder.Show();
}
इस संस्करण से मिलता-जुलता है, सिवाय विधि कॉल से सीधे मूल्य लौटने की कि इसके बजाय, यह विधि का कॉलबैक पैरामीटर के माध्यम से वापस भेज दिया गया है। लॉग में लिखने के लिए कोड तो यह करने के लिए अद्यतन किया जा सकता:
test(returnValue =>
{
Console.WriteLine(returnValue);
});
मैं एक blog post up here है भी पृष्ठभूमि धागे में काम करते हैं और, यूआई में परिणाम प्रदर्शित है कि अगर लागू होता है करने के लिए विभिन्न तरीकों के बारे में बात करती है आपकी स्थिति बिल्कुल उम्मीद है कि यह चीजों को स्पष्ट करने में मदद करता है!
चेक करें: http://stackoverflow.com/questions/4381296/android-wait-on-user-input-from-dialog – Ponmalar
मैं उपयोग नहीं कर सकते यह – mcxxx
मैं आपका जवाब नहीं समझ सकता है ... आप लिंक या कुछ और नहीं देख सका? – Ponmalar