الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Threading and the Asynchronous Pattern in VB.NET

مغلق
بدأه hazzoom في 26 نوفمبر 2005 · 7 رد · 1,178 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته :

يمكن أغلبنا سمع عن الـ Threading لكن أعتقد ان الكثير لم يسمع عن Asynchronous Pattern أو بالعربي نمط اللاتزامن وهي نفس فكرة الـ Threading ولمن لا يعرف ما هو الـ Threading فباختصار الـ Threading هو أن تجعل برنامجك يقوم بمجموعة بتفيذ Sub Procedure في مسار يختلف عن المسار الذي يتم فيه تنفيذ البرنامج داخل الـ Processor المعالج حتي لا يتسبب في جعل البرنامج يتجمد ويتوقف عن الاستجابة (وتظهر الشاشه البيضاء وعباره Not Responding في شريط العنوان ) ولتعلم أهميتها حاول أن تكتب نص كبير من متغير الي ملف نصي بالطريقة المعتاده وأنظر ماذا سيحدث ؟؟؟ ولعمل Thread في برنامجك اتبع الخطوات التاليه :

في حدث النقر علي زر مثلا أنشئ Object من النوع Thread ثم مرر لها الـ Sub Procedure التي تريد تنفيذها في مسار غير مسار البرنامج :

Dim th As New Threading.Thread(AddressOf msg)

ثم قم بعمل تشغيل للـ Thread :

th.Start()

وقبل كل ذلك أنشئ Sub فيها خطوات الكتابة الي ملف نصي أو اظهار رساله علي سبيل المثال :

    
Sub msg()
MsgBox("Cool")
End Sub

والآن ننتقل الي الـ Asynchronous Pattern :

الـ Asynchronization أو اللاتزامن وهو فكره شبيهه أونفس فكرة الـ Threading ,

في بعض الـ NET Framework Classes. نجد بها Methods بالشكل التالي BeginXXX و EndXXX حيث XXX هي الوظيفة التي تؤديها الـ Method بطريقة لا تزامنيه , معني وجود Methods بهذا الشكل في Class معينه يعني أن هذه الـ Class تدعم الـ Asynchronous Pattern , علي سبيل المثال في الـ FileStream Class توجد الـ Methods التاليه BeginRead,BeginWrite,EndRead,EndWrite ونستنتج أنه يمكن الكتابة أو القراءة عن طريق هذه الـ Class بنمط اللاتزامن (وهذه تكون مفيده جدا عند عمل برامج للشبكات في ارسال واستقبال البيانات) علي سبيل المثال لاستخدام الـ Methods التاليه BeginRead,EndRead , اتبع الخطوات التاليه :

قم بتعريف مصفوفه من النوع Byte لاستقبال البيانات من الملف عن طريق الـ FileStream ,

قم بتعريف متغير من النوع FileStream , قم بتعريف متغير من النوع AsyncCallback Delegate :

Dim arr() As Byte
Dim fs As IO.FileStream
Dim Callback As AsyncCallback

في حدث النقر علي زر مثلا :

قم بانشاء Object من الـ AsyncCallback التي قمنا بتعريف متغير منها والتي تأخذ Sub Procedure كمعامل (اتركه الآن 1),

ثم قم بانشاء Object من الـ FileStream الذي عرفناه واعطاؤه المتغيرات اللازمة لقراءة ملف معين (اتركه الآن 2),

ثم قم بعمل ReDim للمصفوفه لاعطاءها (طول البيانات التي ستستقبلها من الـ FileStream) ,

ثم قم ببدء عملية القراءه من الـ FileStream عن طريق استخدام الـ Method BeginRead (اتركه الآن 3),

عند انشاء Object من الـ AsyncCallback كالتالي : الجزء (اتركه الآن 1) ,

Callback = New AsyncCallback(AddressOf endcallback)

سنجد أنها تأخذ Sub Procedure عن طريق المعامل AddressOf , هذه الـ Sub تأخذ متغير من النوع IAsyncResult وهي Interface وذلك لكي نستخدم الخاصيه AsyncState الخاصه بها , فيكون شكل الـ Sub كالتالي :

Sub endcallback(ByVal ar As IAsyncResult)

End Sub

وفي داخل الـ Sub سوف نكتب الكود الذي ينهي القراءة من الـ FileStream (اتركه الآن 4),

وعند انشاء Object من الـ FileStream سيكون الشكل كالتالي : الجزء (اتركه الآن 2) ,

fs = New IO.FileStream("C:\asyn.txt", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read, 4096, True)

وعند بدء عملية القراءة من الـ FileStream عن طريق الـ BeginRead Method يكون شكل الكود كالتالي : الجزء (اتركه الآن 3) ,

fs.BeginRead(arr, 0, arr.Length, Callback, fs)

أما بالنسبه للكود داخل الـ Sub وفيه ننهي القراءة عن طريق استخدام الـ EndRead Method فيكون كالتالي : لجزء (اتركه الآن 3) ,

Dim fs As IO.FileStream
fs = ar.AsyncState
fs.EndRead(ar)
fs.Close()
MsgBox(System.Text.Encoding.UTF8.GetString(arr))

أنا عارف ان الموضوع دخل في بعضه لكن والله هذه هي الطريقه الوحيده اللي قدرت أشرح بيها الموضوع لكن لو نظرتوا للكود في المثال المرفق ستجدوا الموضوع سهل وبسيط ان شاء الله ,

الموضوع قد يحتمل وجود أخطاء فلا تترد في تنبيهي وتصحيحها , المثال علي 2003 ,أرجو منكم الدعاء ,,,

Asynchronous.rar

تم تعديل هذه المشاركة بواسطة hazzoom في 26 نوفمبر 2005 في 13:12

#2

ما شاء الله , تبارك الرحمن أخي حازم , إمضي للأمام بخطوات ثابته و موفقة إن شاء الله.

في المثال يتضح المقال

#3

معلومة جدا مفيده الله يزيدك علم .

سبحان الله وبحمده عدد خلقه ورضا نفسه وزنة عرشه ومداد كلماته

******************************************************

#5

بارك الله فيك حزووم على المعلومة القيمة جعله الله فى ميزان حسناتك

وفقك الله وننتظر المزيد....

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

السلام عليكم

جزاكم الله خيرا

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#8

احنا وانت يا أخ محمد :D

تم تعديل هذه المشاركة بواسطة hazzoom في 6 يناير 2006 في 15:57

هذا الموضوع مغلق.

مواضيع مشابهة