منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : ما حل مشكلة تعارض Task مع Sleep؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته
السؤال في الصورة التالية، وأنا أستخدم فريم وورك 4:
[attachment=15493]
مرحبا اخى

PHP كود :
Private Sub BtnPost_Click(sender As ObjectAs RoutedEventArgsHandles BtnPost.Click
    ShortBook
(TxtLink.TextTxtMessage.Text)
End Sub

Public Sub ShortBook(ByVal Title As StringByVal Status As String)
 
   Try
        Dim txt 
As Integer 0
        Task
.Factory.StartNew(Sub()
 
                                 Dispatcher.BeginInvoke(Sub() BtnPost.IsEnabled False)

 
                                 For ii 0 To 40
                                      
'هنا كود الحلقة'
 
                                     txt txt ii
                                  Next

                                  Thread
.Sleep(5000)
 
                                 MsgBox("تمت العملية بنجاح")

 
                                 Dispatcher.BeginInvoke(Sub() BtnPost.IsEnabled True)
 
                             End Sub)

 
   Catch ex As Exception
        MessageBox
.Show(ex.Message)
 
   Finally
        BtnPost
.IsEnabled True
    End 
Try
End Sub 
ألف شكر لك أخي العزيز أبو نورة وأسأل الله تعالى أن يجعلها في ميزان حسناتك
وأعتذر منك لأنني وضعت صورة حيث كنت في آخر الليل وشعرت بأن التفكير توقف عندي وكان الكود طويلاً فأحببت اختصاره بصورة

أنا أريد وضع sleep ضمن الحلقة بحيث يكون هنالك فارق زمني مثلا 5 ثواني بين كل عنصر من عناصر الحلقية بحيث يتوقف 5 ثواني قبل تنفيذ العنصر الثاني ضمن الحلقة فوضعت هذا الكود:

PHP كود :
                                      For ii 0 To 1
    txt 
txt ii
    Thread
.Sleep(5000)
Next 


ولكن هذا الكود لن يخرج لك الرسالة إلا بعد 10 ثواني أي ضعف الرقم الموجود بعد sleep لذا عدلته للتالي:

PHP كود :
For ii 0 To 1
    txt 
txt ii
    
If ii <> 1 Then
       Thread
.Sleep(5000)
    End If
Next 
وبالفعل الرسالة أصبحت تخرج بعد 5 ثوان
مرحبا اخى

حسب التوضيح الاخير فانت لا تحتاج الى If ii <> 1 Then لكن اجعل Sleep قبل Next فقط والرساله بعد Next

PHP كود :
For ii 0 To 40
    
'هنا كود الحلقة'
    
txt txt ii

    Thread
.Sleep(5000)
Next
MsgBox
("تمت العملية بنجاح"

هنا سينتظر 5 ثوان في في كل حلقه من الحلقات وعند انتهاء الحلقات سيتظهر الرساله
(20-09-17, 12:44 PM)أبو نوره كتب : [ -> ]مرحبا اخى

حسب التوضيح الاخير فانت لا تحتاج الى If ii <> 1 Then لكن اجعل Sleep قبل Next فقط والرساله بعد Next

PHP كود :
For ii 0 To 40
    
'هنا كود الحلقة'
 
   txt txt ii

    Thread
.Sleep(5000)
Next
MsgBox
("تمت العملية بنجاح"

هنا سينتظر 5 ثوان في في كل حلقه من الحلقات وعند انتهاء الحلقات سيتظهر الرساله

أخي العزيز أبو نورة: الجملة الشرطية ضرورية
لأنني إذا حذفت الجملة الشرطية فسيعطيك مهلة انتظار أخرى عند نهاية الحلقة
مثلاً: لو عندي عنصران في الحلقة
سيتم تنفيذ العنصر الأول وبعدها ينتظر 5 ثوان ثم يتم تنفيذ العنصر الثاني وبعدها سينتظر 5 ثوان وبهذا هو انتظر 10 ثوان
ولكن مع الجملة الشرطية سينفذ العنصر الأول وينتظر 5 ثوان ثم ينفذ العنصر الثاني وبعدها ستأتيه الجملة الشرطية ستقول له إن كان عدد الدورات في الحلقة انتهي فلا تتوقف 5 ثوان بل اخرج من الحلقة
هل فهمت قصدي؟
Smile 
مرحبا اخى

نعم فهمت قصدك
اذا تسهيلا للكود نرجع شرط If
PHP كود :
For ii 0 To 40
    
'هنا كود الحلقة'
    
txt txt ii

    
If ii 40 Then Thread.Sleep(5000)
Next
MsgBox
("تمت العملية بنجاح"
(20-09-17, 02:23 PM)أبو نوره كتب : [ -> ]مرحبا اخى

نعم فهمت قصدك
اذا تسهيلا للكود نرجع شرط If
PHP كود :
For ii 0 To 40
    
'هنا كود الحلقة'
 
   txt txt ii

    If ii 
40 Then Thread.Sleep(5000)
Next
MsgBox
("تمت العملية بنجاح"

بيّض الله وجهك أخي العزيز وألف شكر لتعاونك
أسأل الله أن يجعلها في صحيفة أعمالك
Smile
تم حل المشكلة والحمد لله