हालांकि यह एक पुराना धागा है, मैं एक संभावित मुद्दे पर ध्यान आकर्षित करना चाहता था जो डेवलपर्स को प्रभावित कर सकते हैं, जिसने मुझे प्रभावित किया और बड़े UWP ऐप्स में डिबग करना बेहद मुश्किल बना दिया। मेरे मामले में, मैंने 2014 में वापस ऊपर दिए गए सुझावों से निम्नलिखित कोड को हटा दिया, लेकिन कभी-कभार ऐसे ऐप फ्रीज से ग्रस्त हो जाएंगे जो स्वभाव से यादृच्छिक थे।
public static class DispatcherHelper
{
public static Task RunOnUIThreadAsync(Action action)
{
return RunOnUIThreadAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, action);
}
public static async Task RunOnUIThreadAsync(Windows.UI.Core.CoreDispatcherPriority priority, Action action)
{
try
{
await returnDispatcher().RunAsync(priority, () =>
{
action();
});
}
catch (Exception ex)
{
var noawait = ExceptionHandler.HandleException(ex, false);
}
}
private static Windows.UI.Core.CoreDispatcher returnDispatcher()
{
return (Windows.UI.Xaml.Window.Current == null) ?
CoreApplication.MainView.CoreWindow.Dispatcher :
CoreApplication.GetCurrentView().CoreWindow.Dispatcher;
}
}
ऊपर से, मैंने डिस्पैचर को कॉल करने की अनुमति देने के लिए एक स्थिर वर्ग का उपयोग किया था - एक भी कॉल की अनुमति देने के लिए। 95% समय के लिए, क्यूए प्रतिगमन के माध्यम से भी सबकुछ ठीक था, लेकिन ग्राहक हर बार एक मुद्दे की रिपोर्ट करेंगे। इसका समाधान नीचे दिए गए कॉल को शामिल करना था, वास्तविक पृष्ठों में स्थिर कॉल का उपयोग नहीं करना।
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
});
यह तब नहीं होता जब मुझे यह सुनिश्चित करने की आवश्यकता होती है कि UI थ्रेड को App.xaml.cs या मेरे सिंगलटन नेवीगेशन सर्विस से बुलाया गया था जो स्टैक पर पुश / पॉपिंग को नियंत्रित करता था। डिस्पैचर जाहिरा तौर पर यूआई थ्रेड का ट्रैक खो रहा था, क्योंकि प्रत्येक पृष्ठ का अपना यूआई थ्रेड होता है, जब स्टैक में मैसेजबस से विभिन्न प्रकार के संदेश ट्रिगर होते थे।
आशा है कि यह दूसरों को प्रभावित करने में मदद करता है और यह वह जगह भी है जहां मुझे लगता है कि प्रत्येक मंच अपने डेवलपर्स के लिए सर्वोत्तम प्रथाओं को कवर करने वाली एक पूरी परियोजना प्रकाशित करके एक सेवा करेगा।