منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] مشكلة بسيطة جداً timer - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] مشكلة بسيطة جداً timer (/showthread.php?tid=18808)



مشكلة بسيطة جداً timer - 3asfa~mdmra - 15-01-17

سلام عليكم
واجهتني مشكلة تهنيج البرنامج
عند تشغيل تايمر لتنفيذ الكود
الرجاء مساعدتني عند تشغيل تايمر
مايهنج البرنامج
بالاضافة الي
ProgressBar1 

لا اريد ان يمشي بسرعة ولكن ببطء
وبعد الانتهاء يتم توقف  timer
تفضلوا الكود الموجود في timer
كود :
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
       Me.ProgressBar1.Value = 0
       Dim strArray As String() = Me.id.Text.Split(New Char() {"#"c})
       Me.ProgressBar1.Maximum = strArray.Length
       Dim i As Integer = 0
       Do While (i <= strArray.GetUpperBound(0))
           Me.emad1.Send(String.Concat(New String() {"<iq xmlns='jabber:client' to='", Me.room.Text, "@conference.nimbuzz.com' type='set' id='353'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member' jid='", strArray(i), "@nimbuzz.com' /></query></iq>"}))
           Me.ProgressBar1.Value += 1
           i += 1
       Loop
   End Sub



RE: مشكلة بسيطة جداً timer - مساعدة - 15-01-17

السلام عليكم

جرب استخدام الأداة BackgroundWorker بإضافتها للفورم وهذا الكود
كود :
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
   BackgroundWorker1.RunWorkerAsync()
   Button1.Enabled = False

End Sub
كود :
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
   Dim strArray As String() = Me.id.Text.Split(New Char() {"#"c})
   Dim i As Integer
   For i = 0 To strArray.Count - 1
       Me.emad1.Send(String.Concat(New String() {"<iq xmlns='jabber:client' to='", Me.room.Text, "@conference.nimbuzz.com' type='set' id='353'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member' jid='", strArray(i), "@nimbuzz.com' /></query></iq>"}))
       Threading.Thread.Sleep(1000)
       Me.ProgressBar1.Invoke(Sub()
                                  Me.ProgressBar1.Value = ((i + 1) / strArray.Count) * 100
                              End Sub)
   Next
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
   Button1.Enabled = True
End Sub

وتستطيع الانتظار بتغيير القيمة في السطر التالي (1000=ثانية واحدة)
كود :
Threading.Thread.Sleep(1000)

مساعدتي هي صدقة لوجه الله تعالى


RE: مشكلة بسيطة جداً timer - 3asfa~mdmra - 15-01-17

اخي يسلموا ايدك ولكن طلب صغير اخر اريد تطبيق ماذكرتة في الكود اعلا ع هذا الكود
كود :
Jids = txtids.Text.Split("#")
       For i = 0 To Jids.Length - 1
           For Each item As String In ListBox1.Items
               emad1(i).Send("<presence to='" & item & "@nimbuzz.com' type='subscribe'/>")
           Next
       Next
الكود اعلا هوا كتالي
كود :
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
       Dim strArray As String() = Me.id.Text.Split(New Char() {"#"c})
       Dim i As Integer
       For i = 0 To strArray.Count - 1
           Me.emad1.Send(String.Concat(New String() {"<iq xmlns='jabber:client' to='", Me.room.Text, "@conference.nimbuzz.com' type='set' id='353'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member' jid='", strArray(i), "@nimbuzz.com' /></query></iq>"}))
           Threading.Thread.Sleep(1000)
           Me.GenesisProgressBar1.Invoke(Sub()
                                             Me.GenesisProgressBar1.Value = ((i + 1) / strArray.Count) * 100
                                         End Sub)
       Next
   End Sub



RE: مشكلة بسيطة جداً timer - مساعدة - 15-01-17

تفضل الكود

كود :
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Jids = txtids.Text.Split("#")
    Dim i, j As Integer
    For i = 0 To Jids.Length - 1
        For j = 0 To ListBox1.Items.Count - 1
            emad1(i).Send("<presence to='" & ListBox1.Items(j) & "@nimbuzz.com' type='subscribe'/>")

            Threading.Thread.Sleep(1000)

            Dim a As Integer = (i + j)
            Dim b As Integer = (ListBox1.Items.Count + Jids.Length)
            Me.ProgressBar1.Invoke(Sub()
                                       Me.ProgressBar1.Value = ((a + 1) / (b)) * 100
                                   End Sub)

        Next
    Next
End Sub



RE: مشكلة بسيطة جداً timer - 3asfa~mdmra - 15-01-17

الف شكر الك انت اروع شخص عرفته بحياتي وربي بدعيلك بكل صلاتي