عند محاولة تقديم تأخير قبل تنفيذ عملية في WPF، من المهم تجنب استخدام Thread.Sleep، لأن هذا يحظر هذا النهج تسلسل واجهة المستخدم ويمكن أن يؤدي إلى واجهات مستخدم غير مستجيبة. بدلاً من ذلك، فكر في الاستفادة من تقنيات البرمجة غير المتزامنة.
أحد الخيارات هو استخدام DispatcherTimer. يعمل هذا المؤقت على مؤشر ترابط واجهة المستخدم ويستدعي معالج حدث Tick الخاص به بعد فاصل زمني محدد:
tbkLabel.Text = "two seconds delay"; var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) }; timer.Start(); timer.Tick = (sender, args) => { timer.Stop(); var page = new Page2(); page.Show(); };
هناك طريقة أخرى تتضمن استخدام Task.Delay:
tbkLabel.Text = "two seconds delay"; Task.Delay(2000).ContinueWith(_ => { var page = new Page2(); page.Show(); });
هنا، يقوم البرنامج بإنشاء مهمة تكتمل بعد تأخير لمدة ثانيتين ثم يستدعي مندوب الاستمرار لإظهار الصفحة الجديدة.
أخيرًا، بالنسبة للمشاريع التي تستهدف .NET 4.5 أو أعلى، يوفر نمط المزامنة/الانتظار طريقة موجزة ومريحة لـ معالجة التأخير:
public async void TheEnclosingMethod() { tbkLabel.Text = "two seconds delay"; await Task.Delay(2000); var page = new Page2(); page.Show(); }
من خلال الاستفادة من التقنيات غير المتزامنة، يمكن للمطورين إدخال تأخيرات في عمليات WPF دون المساس باستجابة واجهة المستخدم.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3