Xamarin.iOS
Xamarin.iOS में समवर्ती प्रोग्रामिंग
खोज…
पृष्ठभूमि थ्रेड्स से UI को हेरफेर करना
पृष्ठभूमि थ्रेड UI को संशोधित नहीं कर सकते हैं; लगभग सभी UIKit विधियों को मुख्य धागे पर बुलाया जाना चाहिए।
NSObject
किसी उपवर्ग से (किसी भी UIViewController
या UIView
सहित)
InvokeOnMainThread(() =>
{
// Call UI methods here
});
एक मानक C # वर्ग से:
UIApplication.SharedApplication.InvokeOnMainThread(() =>
{
// Call UI methods here
});
InvokeOnMainThread
जारी रखने से पहले निष्पादित करने के लिए मुख्य धागे पर चल रहे आपके कोड का इंतजार करता है। यदि आपको प्रतीक्षा करने की आवश्यकता नहीं है, तो BeginInvokeOnMainThread
उपयोग करें।
Async का उपयोग करें और प्रतीक्षा करें
आप एसिंक्रोनस निष्पादन को संभालने के लिए async विधियों का उपयोग कर सकते हैं। उदाहरण के लिए POST और GET अनुरोध। नीचे बताएं कि आपका डेटा डेटा तरीका है।
Task<List> GetDataFromServer(int type);
आप उस विधि को नीचे दिखाए अनुसार कह सकते हैं
var result = await GetDataFromServer(1);
हालांकि, वास्तविक दिन के अभ्यास में यह विधि एक सर्विस लेयर इंटरफेस में होगी। ऐसा करने के लिए सबसे अच्छा तरीका है कि इसे कॉल करने के लिए एक अलग विधि बनाएं और नीचे दिखाए गए UI को अपडेट करें।
//Calling from viewDidLoad
void async ViewDidLoad()
{
await GetDataListFromServer(1);
//Do Something else
}
//New method call to handle the async task
private async Task GetArchivedListFromServer(int type)
{
var result = await GetDataFromServer(type);
DataList.AddRange(result.toList());
tableView.ReloadData();
}
उपरोक्त कोड स्निपेट में, GetDataListFromServer विधि को कॉल किया जाएगा और यह वेब अनुरोध भेजेगा। फिर भी, यह तब तक UI थ्रेड को ब्लॉक नहीं करेगा, जब तक इसे सर्वर से प्रतिक्रिया नहीं मिल जाती। await GetDataListFromServer(1)
बाद यह लाइन को नीचे ले जाएगा। हालाँकि, private async Task GetArchivedListFromServer(int type)
विधि के अंदर, यह तब तक इंतजार करेगा जब तक कि सर्वर से प्रतिक्रिया प्राप्त न हो जाए ताकि var result = await GetDataFromServer(type);
बाद लाइनों को निष्पादित किया जा सके var result = await GetDataFromServer(type);
।