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

لا يمكن الضغط على أي من عناصر الفورم أثناء تنفيذ حلقة تكرار

مغلق
بدأه الفريد في 5 أغسطس 2007 · 7 رد · 826 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

الإخوة الكرام :

لدي بريمج أعمل عليه و لكن عند تنفيذ حلقة تكرار For Next لا تستجيب عناصر الفورم سواء كتابة في مربعات أو الضغط على زر آخر حتى يتم الانتهاء من حلقة التكرار ... فكيف يمكن تجاوز هذه المشكلة ؟

مثال

فورم يحتوي على 2 زر Button و 1 label فقط

Public Class Form1
	Private StopLoop As Boolean = False

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		For i As Integer = 0 To 32000
			Label1.Text = i
			If StopLoop = True Then
				MsgBox("Stop")
				StopLoop = False
				Exit Sub
			End If

		Next
	End Sub

	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
		StopLoop = True
	End Sub

End Class

و كيف أجعل الرقم يظهر في label ؟؟

:) سؤالين في مشاركة وحدة ( مخالفة ) :) لكن المرة هذي عدّوها

شكراً جزيلاً لكم

تم تعديل هذه المشاركة بواسطة الفريد في 5 أغسطس 2007 في 23:36

#2

اولا :

يمكن مقاطعة الاجراء الحالي عن طريق وضع هذه الجمله داخل الاجراء

  Application.DoEvents()

وستجد ان البرنامج يصبح بطئ نوعا ما

ثانيا :

الرقم سيظهر على الفورم من خلال الكود الذي كتبته في سؤالك

تم تعديل هذه المشاركة بواسطة ابوعبدالملك في 5 أغسطس 2007 في 22:50

------------------وما توفيقي إلا بالله--------------------

إذا كنت بالله مستعصما---------فماذا يضيرك كيد العبيد

#3

شكراً لك يا أبو عبدالملك .....

أفادتني إجابتك وفقك الله و سدد على طريق الخير خطاك

و فعلاً جعلت الفورم يعمل بشكل بطيء ... ألا يوجد حلاً لها ؟

تم تعديل هذه المشاركة بواسطة الفريد في 5 أغسطس 2007 في 23:53

#4

السلام عليكم

الحل : باستخدام تقنية Thread object للمزيد عنها أبحث بهذه الكلمة Thread أو Threading في المنتدى بشكل عام.

مثال على ما سألت عنه سيكون بهذا الشكل.

Imports System.Threading

Public Class Form1

	'Create thread object.
	Private ThreadSafe As Thread = Nothing
	'Declare boolean var.
	Private IsStoppedLoop As Boolean = False
	'Create delegate object.
	Private Delegate Sub SetValueCallBack(ByVal Text As String)


	Private Sub SetValues()
		For i As Integer = 0 To 4000
			Me.SetText("This text was set safely. " & i.ToString)
			If IsStoppedLoop Then
				Me.SetText("Stopped safely." & i.ToString)
				ThreadSafe.Abort()
				Return
			End If
		Next
	End Sub

	Private Sub SetText(ByVal TextToSet As String)
		If Me.Label1.InvokeRequired Then
			Dim deleg As New SetValueCallBack(AddressOf SetText)
			Me.Invoke(deleg, New Object() {TextToSet})
		Else
			Me.Label1.Text = TextToSet
		End If
	End Sub


	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		ThreadSafe = New Thread(New ThreadStart(AddressOf SetValues))
		ThreadSafe.Start()
	End Sub

	Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
		IsStoppedLoop = True
	End Sub

End Class

شاهد المرفق للإستفادة , بالتوفيق إن شاء الله.

AssignValueSafelyToLabelFromThreadObject.rar

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 6 أغسطس 2007 في 00:56

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

#5

بارك الله فيك أخي الكريم الشهاب سأنظر بالمرفق و لي عودة إن شاء الله

#6

ابسم الله الرحمن الرحيم

الاخ الكريم الشهاب الحارق

هل يمكنك الاستفاضة اكثر عن موضوع (Imports System.Threading)

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

خيركم من تعلم العلم وعلمه

وبارك الله فيك

#7

السلام عليكم

في هده الحالة يمكنك استخدام Threading أو Asynchronize

والله اعلم

سبحان الله وبحمده سبحان الله العظيم

#8
اقتباس
للمزيد عنها أبحث بهذه الكلمة Thread أو Threading في المنتدى بشكل عام.

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

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…