السلام عليكم و رحمة الله
اخي الكريم ابتعد عن استخدام التايمر و استخدم التقنيات الجديدة افضل لك
و احرص على ان تكون الاجراءات الخاصة بك من النوع غير المتزامن (اذا كان العدد الذي تريد ارساله كبير) حتى تتحاشى مشاكل التجميد في البرنامج
كمثال بسيط لك ضع ListBox و TextBox و Button و Progresspar
ثم جرب هذا الكود و انتبه لسلاسة سير العملية باستخدام Async Wait Task
كود النموذج كامل
حدد المدة التي تريدها فاصل بين كل ارسال في الخاصية Await Task.Delay
بالتوفيق
اخي الكريم ابتعد عن استخدام التايمر و استخدم التقنيات الجديدة افضل لك
و احرص على ان تكون الاجراءات الخاصة بك من النوع غير المتزامن (اذا كان العدد الذي تريد ارساله كبير) حتى تتحاشى مشاكل التجميد في البرنامج
كمثال بسيط لك ضع ListBox و TextBox و Button و Progresspar
ثم جرب هذا الكود و انتبه لسلاسة سير العملية باستخدام Async Wait Task
كود النموذج كامل
PHP كود :
Public Class Form4
Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i = 1 To 100
ListBox1.Items.Add("emad" & i)
Next
End Sub
Structure Mystruct
Shared room As String = "Room"
Shared mspv1 = 111
Shared mspv2 = 222
Shared mspv3 = 333
Shared mspv4 = 444
Shared mspv5 = 555
Shared colors = "Red"
End Structure
Private Async Sub BtnSend_Click(sender As Object, e As EventArgs) Handles BtnSend.Click
TextBox1.Clear()
If ListBox1.Items.Count > 0 Then
ProgressBar1.Maximum = ListBox1.Items.Count - 1
For x As Integer = 0 To ListBox1.Items.Count - 1
Await (send(0))
ListBox1.Items.RemoveAt(0)
ListBox1.Refresh()
ProgressBar1.Value = x
'هذا الكود لاظهار التقدم بالنسبة المئوية
Dim percent As Integer = CInt((CDbl(ProgressBar1.Value - ProgressBar1.Minimum) / CDbl(ProgressBar1.Maximum - ProgressBar1.Minimum)) * 100)
Using gr As Graphics = ProgressBar1.CreateGraphics()
gr.DrawString(percent.ToString() + "%", SystemFonts.DefaultFont, Brushes.Black, New PointF(ProgressBar1.Width / 2 - (gr.MeasureString(percent.ToString() + "%", SystemFonts.DefaultFont).Width / 2.0F), ProgressBar1.Height / 2 - (gr.MeasureString(percent.ToString() + "%", SystemFonts.DefaultFont).Height / 2.0F)))
End Using
Next
BtnSend.Enabled = True
Else
TextBox1.Text = "<presence to='" & Mystruct.room & "@conference.nimbuzz.com/imanking' type='unavailable'></presence>"
ProgressBar1.Value = 0
End If
End Sub
Private Async Function send(i As Integer) As Task
Dim Sb As New List(Of String)
Sb.Clear()
Dim t As Task = Me.Invoke(Sub()
BtnSend.Enabled = False
Dim Str As String() = {"<message xmlns='jabber:client' to='", Mystruct.room _
, "@conference.nimbuzz.com/", ListBox1.Items(i).ToString, vbNewLine,
"'type='chat' id='292'>", vbNewLine,
"<body>", vbNewLine, Mystruct.mspv1 & vbNewLine &
Mystruct.mspv2 & vbNewLine & Mystruct.mspv3 & vbNewLine &
Mystruct.mspv4 & vbNewLine & Mystruct.mspv5, vbNewLine &
"</body>", vbNewLine, "<html xmlns='http://jabber.org/protocol/xhtml-im'>", vbNewLine,
"<body xmlns='http://www.w3.org/1999/xhtml'>", vbNewLine,
"<p>", vbNewLine, "<em>", vbNewLine, "false", vbNewLine,
"</em>", vbNewLine, "<strong>", vbNewLine, "true", vbNewLine,
"</strong>", vbNewLine, "<span style='" & Mystruct.colors & "'/>", vbNewLine,
"</p>", vbNewLine, "</body>", vbNewLine, "</html>", vbNewLine,
"</message>", vbNewLine, "***********************************"}
Sb.Add(String.Concat(Str))
For Each Instr As String In Sb
TextBox1.AppendText(Instr & Environment.NewLine)
Next
End Sub)
Await Task.Delay(100)
End Function
End Class
حدد المدة التي تريدها فاصل بين كل ارسال في الخاصية Await Task.Delay
بالتوفيق
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


