بنية WPF
يوفر هذا الموضوع جولة إرشادية خاصة بالتسلسل الهرمي للفئة Windows Presentation Foundation (WPF) . يغطي معظم الأنظمة الفرعية من WPF ، كما يوضح كيفية تفاعلها معاً. ذلك يسرد أيضاً تفاصيل بعض الخيارات التي تم إجراؤها بواسطة مهندسو WPF.
يشتمل هذا الموضوع على الأقسام التالية.
- System.Object
- System.Threading.DispatcherObject
- System.Windows.DependencyObject
- System.Windows.Media.Visual
- System.Windows.UIElement
- System.Windows.FrameworkElement
- System.Windows.Controls.Control
- ملخص
- موضوعات ذات صلة
System.Object
طراز برمجة WPF الأساسية يتم كشفها خلال التعليمات البرمجية المدارة . في مرحلة تصميم WPF هناك عدد من المناقشات حول مكان رسم الخط بين المكونات التي تمت إدارتها الخاصة بالنظام و تلك الغير المدارة. CLR توفر عدد من الميزات التي تجعل التطوير أكثر إنتاجية وأكثر فعالية (بما في ذلك إدارة الذاكرة ، خطأ المعالجة ، نظام النوع الشائع الخ) ولكنها وصلت في التكلفة.
المكونات الأساسية لــWPF موضحة في الشكل أدناه. المقاطع الحمراء من الرسم التخطيطي (PresentationFramework PresentationCore و milcore) هم أجزاء التعليمات البرمجية الرئيسية من WPF. من هؤلاء ، واحد فقط هو مكون غير مدار – milcore. تتم كتابة Milcore في التعليمات البرمجية غير المُدارة لتمكين التكامل الوثيق مع DirectX. dهوplay الجميع في WPFهو الانتهاء من خلال DirectXمشغل، مما يسمح للأجهزة الفعالة وتقديم البرامج. WPFأيضا مطلوب التحكم ذاكرة جيدة و التنفيذ. مشغّل التركيب في milcore هو حساس جداً للأداء و مطلوب عن ميزات عديدة خاصة بــ CLR الحصول على أداء إضافي .
الاتصالات بين أجزاء المدارة و الغير المدارة من WPF تمت مناقشتها لاحقاً في هذا الموضوع. باقي طراز البرمجة المدارة تمت مناقشتها في التالي .
System.Threading.DispatcherObject
معظم الكائنات في WPFينحدر من DispatcherObject، التي توفر بنية أساسية للتعامل مع التزامن و الترابط. WPFهو استناداً إلى النظام مراسلة المطبقة بواسطة dهوpatcher. تعمل هذة مثل مضخة الرسائل Win32 المعروفة ; في الواقع، مرسل WPF يستخدم رسائل User32 للتنفيذ عبر مكالمات مؤشرات الترابط.
يوجد بالفعل مفهومين أساسيين للفهم عند مناقشة التزامن في WPF – المرسل و تقارب مؤشرات الترابط.
أثناء مرحلة تصميم WPF ، يكون الهدف الانتقال إلى مؤشر ترابط واحد للتنفيذ ولكن غير-مؤشرات الترابط "affinitized" الطراز. ترابط مؤشرات الترابط يحدث عندما يستخدم مكون هوية تنفيذ مؤشر الترابط لتخزين بعض الأنواع من الحالة. النموذج الأكثر شيوعاً من هذة هو استخدام المخزن المحلي لــ (TLS) لتخزين حالة. تقارب مؤشر الترابط يتطلب أن كل مؤشر ترابط منطقي خاص بالتنفيذ يكون ملكاً لمؤشر ترابط فعلي فعلي واحد فقط في نظام التشغيل التي يمكن أن تصبح ذاكرة كبيرة. في النهاية، طراز مؤشر الترابط الخاص بــ WPF تم الاحتفاظ به في مزامنة مع طراز مؤشر الترابط الخاص بــUser32 الموجودة الخاصة بالتنفيذ الأحادي لمؤشر الترابط مع تقارب مؤشر الترابط . السبب الأساسي في هذا هي أنظمة التشغيل المتداخل مثل OLE 2.0 ، الحافظة و Internet Explorer ، جميعها تتطلب تنفيذ تقارب مؤشر ترابط واحد (STA).
إذا كان لديك كائنات مع مؤشر الترابط STA ، تحتاج إلى الاتصال بين مؤشرات الترابط والتحقق من إنك على مؤشر ترابط الصحيح. هنا يقع دور المرسل. المرسل هو رسالة أساسية ترسل إلى النظام قوائم الانتظار متعددة محددة الأولوية. تتضمن أمثلة الرسائل ، إعلامات الإدخال الأولية (نقل الماوس) أو دالات إطار عمل (تخطيط) أو أوامر المستخدم (تنفيذ هذا الأسلوب). بواسطة الاشتقاق من DispatcherObject، تقوم بإنشاء كائن CLR يحتوي على سلوك STA و سيتم إعطاءه مؤشر إلى المرسل في وقت الإنشاء.
System.Windows.DependencyObject
واحد من الفلسفات المعمارية الأساسية المستخدمة في بناء WPF كان أداءاً للخصائص عبر الأساليب أو الأحداث. الخصائص تعريفية وتسمح لك أكثر بتحديد هدف بدلاً من إجراء بسهولة. هذا معتمد أيضاً على طراز أو البيانات ، النظام لعرض محتوى واجهة المستخدم. هذة الفلسفة لها تأثيرها المقصود لإنشاء المزيد من الخصائص التي قد تربطها ، من أجل التحكم الأفضل بسلوك تطبيق.
كي يكون لديك أكثر من النظام المسوق من قبل الخصائص ، فإن نظام خواص أغنى مطلوب أكثر من ما يوفره CLR . مثال بسيط على هذا الثراء هو إعلامات التغيير. من أجل تمكين طريقتين للربط, تحتاج إلى كلا الوجهين الخاصين بالربط لدعم اعلام التغيير . لجعل السلوك مرتبط بقيم الخاصية ، يجب أن يتم إعلامك متى تغيرت قيمة الخاصية . Microsoft NET Framewor. يحتوي على واجهة INotifyPropertyChange ، والذي يسمح لكائن بنشر إعلامات تغيير ومع ذلك فهو أمر اختياري.
WPF يوفر نظام خواص أغنى مشتق من نوعDependencyObject . نظام الخواص يكون نظام خواص اعتمادي في التي فيها يقوم بتعقب التبعيات بين تعبيرات الخواص و تلقائياً تقوم باعادة الصلاحية قيم عند تغيير التبعيات. على سبيل المثال، إذا كان لديك خاصية ترث (مثل FontSize) ، يتم تلقائياً تحديث النظام إذا تغيرت الخاصية على أصل عنصر يرث من قيمة.
أساس نظام خاصية WPF هو مفهوم تعبير الخاصية . في هذا الإصدار الأول من WPF ، يتم اغلاق نظام التعبير و يتم توفير كافة التعبيرات كجزء من إطار عمل. التعابير هي السبب في إن نظام الخصائص لا يحتوي على ربط البيانات ، تنميط , أو توريث بتعليمات برمجية مضمنة ولكن بدلاً من ذلك توفرها طبقات أحدث ضمن الإطار.
يوفر نظام الخصائص أيضاً تخزين متفرق لقيم الخصائص . لأنه يمكن أن يكون لدى كائنات عشرات (إذا لم المئات) من الخصائص ، و معظم القيم في الحالة الافتراضية الخاصة بها (موروثة ،التي تعيينها بواسطة أنماط الخ) ، ليس كل مثيل لكائن مضطر ان يحوز على وزن كامل لكل خاصية معرفة عليه.
هي ميزة جديدة النهائية من النظام خاصية notion من خصائص مرفقة . WPFعناصر مضمنة في المبدأ تركيب و إعادة الاستخدام مكوّن. وهي غالباً حالة أن بعض العناصر الحاوية (مثل عنصر تخطيط Grid ) تحتاج إلى بيانات إضافية على العناصر التابعة للتحكم في السلوك (مثل معلومات الصف/العمود). بدلاً من اقتران كافة هذه الخصائص بكل عنصر ، يتم السماح لأي كائن بتوفير تعريفات الخاصية لأي كائن آخر. تشبه هذه ميزات "expando"في JavaScript.
System.Windows.Media.Visual
عند تعريف نظام، الخطوة التالية هي الحصول على بكسل مرسوم للشاشة. Visualتوفر الفئة لإنشاء شجرة الكائنات المرئية، بعضها بشكل اختياري الذي يتضمن إرشادات الرسم وبيانات التعريف الخاصة بكيفية تقديم تلك الإرشادات (لقطة التحويل، الخ). Visualهو مصمم ليكون خفيفة ومرنة جداً، أن معظم الميزات لذلك لا العامةAPIالتعرض للضوء وتعتمد بشكل كبير تشغيل دالات رد الاتصال المحمية.
Visualهو يؤشر الإدخال بالفعلWPFإنشاء النظام. Visualهو نقطة الاتصال بين الأنظمة هذه الثاني الفرعية، مدارAPImilcore غير مدار.
WPF يعرض بيانات بواسطة العبور على بنيات بيانات غير مدارة يديرها milcore. تمثل هذه البنيات ، التي تسمى عقد التركيب ، شجرة عرض هرمية بإرشادات التقديم في كل عقدة. هذة الشجرة ، الموضحة على الجانب الأيمن من الشكل بالأسفل , يتم فقط الوصول إليها من خلال بروتوكول مراسلة.
عند برمجة WPF ، تقوم بإنشاء عناصر Visual و أنواع مشتقة ، والتي تتصل داخلياً إلى شجرة تركيب خلال بروتوكولات الرسائل تلك. كل Visual في WPF يمكنه إنشاء واحد أو لا شيء, أو عدة عقد تركيب .
هناك تفاصيل معمارية هامة يجب ملاحظتها هنا – الشجرة بالكامل من المرئيات والصور و إرشادات رسم تم تخزينها مؤقتاً. في مصطلحات الرسومات ، WPF تستخدم نظام التقديم المحفوظ . هذا يمكّن النظام من إعادة الرسم في سرعة التحديث العالية دون تركيب حظر النظام على عمليات الاسترجاعات لتعليمات المستخدم البرمجية . يساعد هذا في منع ظهور التطبيقات غير مستجيبة.
تفصيل مهم آخر لا يمكن ملاحظته فعلاً في الرسم التخطيطي هو كيفية قيام النظام فعلياً بتنفيذ التركيب.
في User32 "و" GDI ، فإن النظام يعمل على نظام وضع اللقطة الفوري . عندما يحتاج مكون إلى أن يتم عرضه ، يقوم النظام بتأسيس حدود لقطة و التي خارجها لن يكون مسموحاً للمكون لمس البكسل و من ثم سيتم سؤال المكون أن يقوم بالرسم بالبكسل في هذا المربع. هذا النظام يعمل بشكل جيد جداً في أنظمة الذاكرة المقيدة لأنه عند تغير شيىء ما ، يمكنك لمس المكون المتأثر فقط – لا مكونين أبداً يتساهمان في لون بكسل واحد.
WPF يستخدم طراز الرسم "painter's algorithm". وهذا يعني أنه بدلاً من اقتصاص لكل مكون ، يتم سؤال كل مكون للتقديم من الخلف إلى الأمام للعرض. هذا يسمح لكل مكون أن يرسم عبر شاشة عرض المكون السابق. ميزة هذا الطراز هي إنه يمكن أن تحظى بالأشكال المعقدة, الشفافة جزئياً. مع أجهزة الرسومات الحديثة الحالية ، يكون هذا الطراز سريع نسبياً (التي لم تكن الحالة عند انشاء User32 / GDI ا).
كما ذكر سابقاً، الفلسفة الأساسية من WPF هو النقل إلى تعريف أكثر ، "الخاصية المركزية" طراز البرمجة. في النظام المرئي ، يظهر هذا في مكانين مثيرين للاهتمام .
أولاً، إذا كنت تفكر في نظام الرسومات الخاص بالوضع المحفوظ ، هذا فعلاً النقل بعيداً عن طراز نوع DrawLine/DrawLine الحتمي ، إلى طراز توجيه البيانات – new Line()/new Line(). هذا النقل إلى البيانات حسب التقديم تسمح بعمليات معقدة على إرشادات الرسم بأن يتم التعبير عنها باستخدام خصائص. الأنواع المشتقة من Drawing هي طراز الكائن للتقديم بشكل فعال.
ثانياً، إذا قمت بتقييم نظام الحركة ، سترى إنها غير مصرحة تقريباً بشكل كامل. بدلاً من طلب مطور لحساب الموقع التالي أو اللون التالي ، يمكنك التعبير عن الحركات كمجموعة من الخصائص على كائن حركة. ثم يمكن هذه الحركة للتعبير عن هدف المطور أو المصمم (نقل هذا الزر من هنا إلى هناك في 5 ثواني) ، و إن النظام يمكنه تحديد الطريقة الأكثر كفاءة لإنجاز هذا.
System.Windows.UIElement
UIElement يعرّف الأنظمة الفرعية الأساسية بما فيها تخطيط ، مدخلات ، الأحداث.
التخطيط هو المفهوم الأساسي في WPF. في العديد من أنظمة هو أي التعيين ثابتة من طرازات تخطيط (يدعم HTML ثلاثة نماذج للتخطيط؛ تدفق مطلقا، والجداول) أو لا يوجد نموذج للتخطيط (استدعاء حقا فقط يعتمد الموضع المطلق). WPFتبدأ الافتراض أن المطورين و تريدها مصممي نموذج تخطيط مرنة وقابلة للتوسعة، والتي قد يتم تحريك حسب قيم خاصية بدلاً من الحتمي منطق. في مستوى UIElement ، العقد الأساسي للتخطيط تم تقديمه – طراز مرحلتين مع مسارات Measure و Arrange .
Measure يسمح للمكون تحديد كم حجم يرغب في أخذه . هذا منفصل عن Arrange بسبب وجود العديد من المواقف حيث العنصر الأصلي سيسألك عن تابع لقياسه عدة مرات لتحديد الموضع و الحجم الأمثل له. الحقيقة إن العنصر الأصلي تسأل العناصر التابعة لقياس يوضح فلسفة مفتاح آخر من WPF – الحجم للمحتوى. كافة عناصر التحكم في WPF تعتمد قابلية تغيير الحجم الطبيعي للمحتوى الخاص بها. هذا يجعل التعريب أسهل ويسمح لتخطيط ديناميكي من العناصر أثناء تغيير حجم الأشياء. مرحلة Arrange تسمح الأصل لوضع وتحديد الحجم النهائي لكل عنصر تابع.
غالباً ما تم قضاء كثير من الوقت في الحديث حول جانب الإخراج من WPF – Visual و الكائنات ذات الصلة. ومع وجود كمية هائلة من المنتجات التي تتسم بالسهولة لابتكار طرق على جانب الادخال أيضاً. على الأرجح ، التغيير الأساسي الأكثر في نموذج الإدخال لـ WPF طراز متناسق الذي عن طريقه يتم توجيه أحداث الإدخال خلال النظام.
ينشأ الإدخال كـإشارة على برنامج تشغيل جهاز بالوضع kernel و يحصل على توجيه إلى العملية و مؤشر الترابط الصحيحين من خلال عملية intricate المتضمنة في Windows kernel و User32. رسالة استدعاء المطابقة للإدخال مرة واحدة هو توجيه في WPF، هو في WPFالخام إدخال رسالة وإرسالها في dهوpatcher. WPFيسمح للأحداث إدخال الأولية تتحول إلى عدة أحداث الفعلي، بتمكين ميزات مثل "MouseEnter" تطبيقه على المستوى منخفض من النظام مع يضمن تسليم.
يتم تحويل كل حدث إدخال إلى على الأقل حدثين – حدث العرض "و" الحدث الفعلي. كافة الأحداث في WPF يكون لها اعلام التوجيه خلال شجرة العناصر . أحداث يقال لها بأنها "فقاعة" إذا كانت تجتاز من هدف أعلى الشجرة إلى الجذر يقال لها "النفق" إذا بدأت من الجذر و قامت باجتياز أسفل الهدف. نفق أحداث عرض الإدخال ، سامحاً بتمكين أي عنصر في شجرة فرصة لتصفية أو اتخاذ إجراء على الحدث. أحداث (غير المعاينة) العادية ' ثم فقاعة من الهدف من أعلى إلى الجذر.
يجعل هذا الانقسام بين مرحلة النفق والفقاعية تنفيذ الميزات مثل مسرعات لوحة المفاتيح تعمل بطريقة متناسقة في عالم مركب. في User32 ، يمكنك تطبيق مسرعات لوحة المفاتيح وذلك بجعل جدول عمومي مفرد يحتوي على سرعات تريد تدعيمها (Ctrl + N تعيين إلى "جديد"). في المرسل للتطبيق الخاص بك ، سوف تقوم باستدعاء TranslateAccelerator الذي سيتشمم رسائل الادخال في User32 ويحدد ما إذا كان أي منها يطابق التسريع المسجل. في WPF لن يعمل هذا لأن النظام مركب بشكل كامل – أي عنصر يمكنه معالجة واستخدام أي مسرع من لوحة المفاتيح. امتلاك طراز المرحلتين للإدخال يسمح للمكونات تنفيذ "TranslateAccelerator" الخاص بهم .
حتى تستغرق هذه الخطوة المزيد ، UIElement يقدم أيضاً اعلام خاص بــ CommandBindings. نظام الأمر WPF يسمح للمطورين لتعريف وظيفة في صيغة نقطة نهاية الأمر – شيء ما يقوم بتنفيذ ICommand. تربيطات الأمر تقوم بتمكين عنصر بتعريف تعيين بين إيماءة إدخال (Ctrl + N) و أمر (جديد). كلا من إيماءات الإدخال و تعريفات الأمر قابلين للتوسع ، كما يمكن أن يكونا متصلين معاً في وقت الاستخدام. يجعله هذا سهلاً , على سبيل المثال، للسماح للمستخدم النهائي لتخصيص عمليات ربط المفاتيح التي يرغبون في استخدامها داخل أحدى تطبيقات.
إلى هذه النقطة في الموضوع ، ميزات "الأساسي" الخاصة بــ WPF – الميزات المنفذة في التجميع PresentationCore ، أخذت كل التركيز. عند إنشاء WPF ، فصل نظيف بين أجزاء أساسية (مثل عقد التخطيط بــ القياس و التنظيم ) وأجزاء إطار العمل (مثل تطبيق تخطيط معين مثل Grid) كان النتيجة المطلوبة. الهدف كان توفير نقطة قابلية للتوسعة أسفل الكومة العاملة مما سيسمح للمطورين إنشاء الإطارات الخاصة بهم إذا لزم الأمر.
System.Windows.FrameworkElement
FrameworkElement يمكن البحث عنها بطريقتين مختلفتين . يعمل هذا على تقديم مجموعة من نُهج والتخصيصات على الأنظمة الفرعية المقدمة في طبقات أقل من WPF. كما يقدم مجموعة من أنظمة فرعية جديدة.
سياسة الأساسية المقدمة بواسطة FrameworkElementهو حول تطبيق التخطيط. FrameworkElementبناء تشغيل عقد التخطيط الأساسي المقدمة من قبلUIElementويضيف notion تخطيط "فتحه" التي يسهل لتخطيط الكتاب إلى تحتوي مجموعة متناسقة من الخصائص التي تعتمد تشغيل تخطيط دلالات. خصائص مثل HorizontalAlignment ، VerticalAlignment ، MinWidth ، و Margin (لتسمية بضع) تقوم بإعطاء كافة المكونات المشتقة من سلوك FrameworkElement المتناسق داخل تخطيط الحاويات.
FrameworkElement يوفر تعرضAPI للضوء أسهل للعديد من الميزات المعثور عليها في الطبقات الأساسية من WPF. على سبيل المثال، FrameworkElement يوفر الوصول المباشر إلى الحركة خلال أسلوب BeginStoryboard . Storyboard يوفر طريقة لرسم نص لخيارات الحركة المتعددة مقابل مجموعة من الخصائص.
الشيئان الأكثر أهمية هما إن الذي يقدمه FrameworkElement هي ربط البيانات و الأنماط.
نظام ربط البيانات الفرعي في WPF يجب أن يكون سهل التعامل مع أي شخص استخدم Windows Forms أو ASP.NET لإنشاء تطبيق واجهة المستخدم (UI). في كل من هذه الأنظمة، هناك هو طريقة بسيطة للتعبير عن رغبتك في خاصية واحدة أو المزيد عنصر معين يكون منضماً إلى قطعة من بيانات. WPFعلى كامل دعم لربط خاصية التحويل وقائمة التضمين.
من أحد الميزات المثيرة للاهتمام لربط البيانات في WPF هو تقديم قوالب البيانات . قوالب البيانات تسمح لك تعريفياً بتحديد كيفية تجسيد جزء من البيانات . بدلاً من إنشاء واجهة مستخدم مخصصة يمكن ربطه بالبيانات ، بدلاً من ذلك يمكنك ترك المشكلة و السماح للبيانات تحديد العرض الذي سيتم إنشاؤه.
التنميط فعلاً هو شكل خفيف لربط البيانات . استخدام التنميط ، يمكنك ربط مجموعة من الخصائص من تعريف مشترك إلى واحد أو أكثر من مثيلات عنصر. الأنماط التي تم تطبيقها على عنصر إما حسب المرجع الصريح (عن طريق إعداد خاصية Style ) أو ضمنياً عن طريق إقران نمط بنوع CLR الخاص بالعنصر.
System.Windows.Controls.Control
الميزة الأكثر أهمية في عنصر التحكم هي القوالب . إذا كنت تفكر في نظام التركيب الخاص بــWPF كنظام تقديم طراز محفوظ ، القوالب تسمح لعنصر التحكم وصف التقديم الخاص به بطريقة ذات معلمات ، مصرّحة. ControlTemplate هي فعلاً لا شيء أكثر من برنامج نصي لإنشاء مجموعة من العناصر التابعة مع الارتباطات إلى خصائص يوفرها عنصر التحكم.
Control يوفر مجموعة من خصائص الأسهمForeground ،Background ،Padding لتسمية القليل الذي يمكن أن يقوم باستخدامه كتّاب القالب لتخصيص عرض عنصر التحكم . يوفر تطبيق عنصر التحكم نموذج البيانات و طراز التفاعل. يقوم طراز التفاعل بتعريف مجموعة من الأوامر (مثل إغلاق لإطار) والروابط لإيماءات الإدخال (مثل النقر فوق علامة X حمراء في الزاوية العليا من الإطار). يوفر طراز البيانات مجموعة من الخصائص إما لتخصيص طراز تفاعل أو تخصيص العرض (المحدد بواسطة القالب).
هذا التقسيم بين طراز البيانات (خصائص) و طراز تفاعل (الأوامر والأحداث) ، طراز العرض (قوالب) يقوم بتمكين التخصيص الكامل لمظهر وسلوك عنصر التحكم.
جانب شائع من طراز البيانات من عناصر التحكم هو طراز المحتوى. إذا نظرت في عنصر تحكم مثل Button ، سوف ترى أنها تحتوي على خاصية تسمى "محتويات" من نوع Object. في Windows Forms و ASP.NET ، هذة الخاصية عادةً تكون سلسلة – ومع ذلك فهذا يحدد نوع المحتوى الذي يمكنك وضع فيه زر. محتوى الزر يمكن أن يكون سلسلة بسيطة أو كائن بيانات معقد أو شجرة عنصر بالكامل. في حالة كائن البيانات ، فإن قالب البيانات يتم استخدامه لإنشاء شاشة عرض.
ملخص
WPF تم تصميمها بحيث تسمح لك بإنشاء انظمة عروض تقديمية مسوقة بالبيانات ، حيوية. تم تصميم كل جزء من النظام لإنشاء كائنات خلال مجموعات الخصائص التي تقوم بظبط هذا السلوك . ربط البيانات هو جزء أساسي من النظام يتم دمجه عند كل طبقة.
التطبيقات التقليدية تقوم بالعرض ومن ثم تقوم بالربط ببعض البيانات . في WPF ، كل شيء حول عنصر التحكم ، كل وجه من العرض ، تم إنشاؤه بواسطة بعض الأنواع من ربط البيانات . يتم عرض نص تم العثور عليه داخل زر بواسطة إنشاء عنصر تحكم متكون داخل الزر و ربط شاشة العرض الخاصة به بخاصية المحتوى الخاصة بالزر .
عندما تبدأ تطوير WPF المستند إلى التطبيقات، يجب أن تشعر بالألفة جداً . يمكنك تعيين خصائص ، استخدام كائنات ، ربط البيانات في الكثير بنفس الطريقة التي يمكنك بها استخدام Windows Forms أو ASP.NET. باستقصاءأعمق داخل بنية WPF ، ستكتشف وجود احتمالية من أجل إنشاء تطبيقات أغنى بكثير تقوم بمعاملة البيانات أساساً كبرنامج التشغيل الأساسي للتطبيق.