"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تقديم تأخيرات في عمليات WPF دون حظر مؤشر ترابط واجهة المستخدم؟

كيفية تقديم تأخيرات في عمليات WPF دون حظر مؤشر ترابط واجهة المستخدم؟

تم النشر بتاريخ 2024-11-20
تصفح:549

How to Introduce Delays in WPF Operations Without Blocking the UI Thread?

تحقيق التأخير في عمليات WPF باستخدام أساليب بديلة

عند محاولة تقديم تأخير قبل تنفيذ عملية في WPF، من المهم تجنب استخدام Thread.Sleep، لأن هذا يحظر هذا النهج تسلسل واجهة المستخدم ويمكن أن يؤدي إلى واجهات مستخدم غير مستجيبة. بدلاً من ذلك، فكر في الاستفادة من تقنيات البرمجة غير المتزامنة.

نهج DispatcherTimer

أحد الخيارات هو استخدام 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 Approach

هناك طريقة أخرى تتضمن استخدام Task.Delay:

tbkLabel.Text = "two seconds delay";

Task.Delay(2000).ContinueWith(_ => {
    var page = new Page2();
    page.Show();
});

هنا، يقوم البرنامج بإنشاء مهمة تكتمل بعد تأخير لمدة ثانيتين ثم يستدعي مندوب الاستمرار لإظهار الصفحة الجديدة.

Async/Await Approach (لـ .NET 4.5 والإصدارات الأحدث)

أخيرًا، بالنسبة للمشاريع التي تستهدف .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