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

سؤال : كيف اقوم بعمل Thread فى البرنامج

بدأه MrProgrammer في 31 ديسمبر 2009 · 4 رد · 745 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندى استفسار بسيط وهو عن كيفية عمل Thread بسيطة

يعنى انا كنت اريد لما اضغط على زر معين على الفورم يتم وضع نص معين فى خاصية Text الخاصة بعنصر التحكم Label الموجود على نفس الفورم

وايضا كيف اقوم بعمل Thread حيث عندما اضغط على زر على الفروم تظهر فورم اخرى لفترة معينة ثم تختفى

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

اى عندما يتنتهى البرنامج من العملية الحسابية تختفى الفورم التى ظهرت نتيجة لل Thread

وفى نفس الوقت اريد ان اعرف كيف انهى هذة Thread

ارجو ان اجد الاجابة لديكم

وجزاكم الله خيرا ان شاء الله

تم تعديل هذه المشاركة بواسطة MrProgrammer في 31 ديسمبر 2009 في 14:22

#2

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

مرحبا أخى الكريم

بالنسبة لوضع نص فى أداة اللافتة Label كما ذكرت قم بوضعه فى الخاصية Text

Label1.Text = "Your text goes here"

بالنسبة للنقطة الثانية وهى إظهار فورم لمدة معينة فهذا الأمر لا يحتاج إلى Thread فقط عند دخول الدالة التى تقوم بعمل العملية الحسابية قم بإظهار الفورم وقبل الخروج من الدالة مباشرة أى قبل End Sub قم بإغلاق هذا الفورم

بالنسبة لطريقة إنشاء مسار تنفيذ Thread فهى بسيطة جدا بإذن الله

Dim th As New Threading.Thread(AddressOf ThreadFunc)
th.Start()

ولإنهاء مسار التنفيذ

If th.IsAlive Then
    th.Abort()
End If

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

الـ Threads لن تشعر بفاعليتها بوضع نص فى اداه او اظهار فورم و اخفائها و لكن يمكنك ان تدرك فعاليته عندما تتعامل مع احداث تأخذ وقت طويل و قت تسبب فى ايقاف عمل البرنامج مثل عمل batch update لمجموعه ضخمه من السجلات إلى قاعدة بيانات موجوده على سرفر او احضار البيانات من قاعدة بيانات موجوده على سرفر.

قبل التفكير فى استخدام المسارات داخل برنامجك قم بتجربة كل الإحتمالات البديله لإن برمجة الـ Threading ليست بالسهوله التى تتوقعها و على سبيل المثال النقطه التى ذكرتها بأنك تريد وضع نص داخل اداه الـ Label، الأخ شبح كتب الكود التالى

Label1.Text = "Your text goes here"

لو انت حبيت تحط الكود ده جوه مسار تنفيذ غير الأساسى بتاع البرنامج هيظهر لك خطأ لإن مش متاح لك انك تتعامل مع GUI او اى من ادواتها من داخل اى مسار تنفيذ غير الرئيسى بتاع البرنامج. لكن لو انت مصر اقرا الكود التالى

Imports System.Threading

Public Class Form1

    Dim thrd As Thread

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        thrd = New Thread(AddressOf ThreadCallBack)
        thrd.Start()
    End Sub


    Sub ThreadCallBack()
        Dim i As Action(Of String) = AddressOf SetLabelText

        Me.Invoke(i, "Your text goes here")
        thrd.Abort()
        thrd = Nothing
    End Sub

    Sub SetLabelText(ByVal value As String)
        Label1.Text = value
    End Sub

End Class

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#4

الف الف شكر لكم اخوانى الاحباء على الردود الجميلة وعلى الاهتمام

فى الحقيقة انا عندى المشكلة الاتية ولذلك احتاج الى Thread

انا عندى مشروع برنامج يقوم بعمل العديد من العمليات الحسابية الكبيبرة جدا وذلك عند الضغط على زر معين فى البرنامج

حتى ان البرنامج يهنج ويعلق وياخد حوالى ثلاث او اربع ثوانى او اكثر لكى ينتهى من العمليات الحسابية

لذلك انا اريد عمل Thread لكن يظهر Label ومكتوب فية عبارة مثلا " ارجو الانتظار نهاية العمليات الحسابية "

يعنى مثلا عندما يضغط المستخدم على الزر الذى يتم بسببة بدء هذة العمليات الحسابية الكثيرة يظهر هذا النص فى Label ثم بعد الانتهاء من العمليات الحسابية يختفى النص ولا يظهر شئ فى Label

ارجو ان اكون اوضحت ما اريد بالظبط

وانا فى انتظار ردودكم احبائى الكرام ان شاء الله

تم تعديل هذه المشاركة بواسطة MrProgrammer في 31 ديسمبر 2009 في 15:34

#5

هل من مجيب

Up

تم تعديل هذه المشاركة بواسطة MrProgrammer في 1 يناير 2010 في 01:53

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