تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة بسيطة جداً timer
#1
سلام عليكم
واجهتني مشكلة تهنيج البرنامج
عند تشغيل تايمر لتنفيذ الكود
الرجاء مساعدتني عند تشغيل تايمر
مايهنج البرنامج
بالاضافة الي
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
الرد
تم الشكر بواسطة:
#2
السلام عليكم

جرب استخدام الأداة 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)

مساعدتي هي صدقة لوجه الله تعالى
الرد
تم الشكر بواسطة: 3asfa~mdmra , 3asfa~mdmra
#3
اخي يسلموا ايدك ولكن طلب صغير اخر اريد تطبيق ماذكرتة في الكود اعلا ع هذا الكود
كود :
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
الرد
تم الشكر بواسطة:
#4
تفضل الكود

كود :
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
الرد
تم الشكر بواسطة: 3asfa~mdmra
#5
الف شكر الك انت اروع شخص عرفته بحياتي وربي بدعيلك بكل صلاتي
الرد
تم الشكر بواسطة:



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم