تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] ما حل مشكلة تعارض Task مع Sleep؟
#1
السلام عليكم ورحمة الله وبركاته
السؤال في الصورة التالية، وأنا أستخدم فريم وورك 4:
   
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#2
مرحبا اخى

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 
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , السندبااد
#3
ألف شكر لك أخي العزيز أبو نورة وأسأل الله تعالى أن يجعلها في ميزان حسناتك
وأعتذر منك لأنني وضعت صورة حيث كنت في آخر الليل وشعرت بأن التفكير توقف عندي وكان الكود طويلاً فأحببت اختصاره بصورة

أنا أريد وضع 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 ثوان
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: أبو نوره
#4
مرحبا اخى

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

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

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

هنا سينتظر 5 ثوان في في كل حلقه من الحلقات وعند انتهاء الحلقات سيتظهر الرساله
الرد }}}
تم الشكر بواسطة: السندبااد , السندبااد , Amir_Alzubidy
#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 
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: أبو نوره , ابو روضة
#6
مرحبا اخى

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

    
If ii 40 Then Thread.Sleep(5000)
Next
MsgBox
("تمت العملية بنجاح"
الرد }}}
تم الشكر بواسطة: السندبااد , ابو روضة , Amir_Alzubidy
#7
(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
تم حل المشكلة والحمد لله
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: أبو نوره , ابو روضة , Amir_Alzubidy



التنقل السريع :


يقوم بقرائة الموضوع: