[تم الحل] انشاء المسارات وتمرير البارامترات لها وقت التشغيل - سعود - 02-09-22
أرجو ان تنجح مع التحميل لاجزاء الملف عن بعد
السؤال كيف نقوم بتوليد المسارات وفقا لاجراء او نتيجة اجراء معين؟
مثلا :
100 / 5
نولد مسارات Thread بعدد الناتج.
كيف يكون هذا؟
RE: فائدة على الهامش تمرير اكثر من بارامتر الى المسار thread - سعود - 02-09-22
صباح الخير
هل يمكن ام لا
RE: فائدة على الهامش تمرير اكثر من بارامتر الى المسار thread - Taha Okla - 02-09-22
(02-09-22, 06:03 AM)سعود كتب : صباح الخير
هل يمكن ام لا
صباح الأنوار
أظن يمكن ..
وصلت لجزء من فكرة الحل .. ووقفت ..
وهذا هو الجزء ..
أفتح مشروع جديد وضع عليه زر واحد ..
ثم أفتح محرر الاكود لنافذة وضع فيها هذا الكود ..
كود :
Dim pTop As Integer = 4
Private Location_control As New Point(10, 50)
Dim i1 As Integer
Private Sub ALL(pC1 As Control(,))
Dim pProgressBar As ProgressBar = CType(pC1(0, i1), ProgressBar)
Dim pLabel As Label = CType(pC1(1, i1), Label)
For i As Integer = 1 To 100
pProgressBar.Invoke(Sub() pProgressBar.Value = i)
pLabel.Invoke(Sub() pLabel.Text = pProgressBar.Value)
Threading.Thread.Sleep(150)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim TA As Threading.Thread() = New Threading.Thread(3) {}
Dim C(1, 3) As Control
Dim pProgress As ProgressBar() = New ProgressBar(3) {}
Dim lLable As Label() = New Label(3) {}
Dim i As Integer
For i = 0 To 3
i1 = i
' TA(i) = New Threading.Thread(AddressOf ALL)
C(0, i) = pProgress(i)
pProgress(i) = New ProgressBar
pProgress(i).Name = "pProgressX" & i
pProgress(i).Location = New Point(Location_control.X + 10, Location_control.Y)
pProgress(i).Width = Me.Width - 100
pProgress(i).Height = 20
pProgress(i).Minimum = 0
pProgress(i).Maximum = 100
pProgress(i).Value = 25
Location_control.Y += 10
Controls.Add(pProgress(i))
C(1, i) = lLable(i)
lLable(i) = New Label
lLable(i).Name = "lLableX" & i
lLable(i).Location = New Point(pProgress(i).Width + Location_control.X + 10, Location_control.Y)
lLable(i).Width = Me.Width - 30
lLable(i).Height = 20
lLable(i).Text = 25
Location_control.Y += 24
Controls.Add(lLable(i))
' TA(i).Start(C)
Next
End Sub
RE: كيف الى تمرير اكثر من بارامتر الى المسار thread بشكل ديناميكي او اوتوماتيكي او تلقائي - سعود - 02-09-22
بارك الله فيك
انا احاول استفيد من كل سطر بالاكواد وهذه الاكواد ممتازة باذن الله سادقق فيها اكثر من مرة.
ما رايك بالكود التالي؟ توصلت له لتوي .
هل ينفع لو طبقناه على الاجزاء الخاصة بالملف البعيد بحيث يتم التحميل كلية في آن واحد؟ اذ هو المقصد. .سنرى باذن الله تعالى.
على فكرة الاكواد التالية ليست هي المطلوبة بشكل دقيق بل تحتاج تعديل لنعتبر كل شريط جزء من ملف يفترض ان الشريط الثاني يبدا من النقطة المخصصة له و هكذا
دعواتكم حفظكم الله.
PHP كود :
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim ths As New List(Of Threading.Thread) Dim d As New Dictionary(Of ProgressBar, Label) Dim pros As New List(Of ProgressBar) Dim lbls As New List(Of Label) For Each cl As Control In Me.Controls Dim prog As ProgressBar = Nothing Dim lbl As Label = Nothing If TypeOf cl Is ProgressBar Then prog = DirectCast(cl, ProgressBar) pros.Add(prog) ElseIf TypeOf cl Is Label Then lbl = DirectCast(cl, Label) lbls.Add(lbl) End If Next For r As Integer = 0 To pros.Count - 1 d.Add(pros(r), lbls(r)) Next For i As Integer = 0 To d.Count - 1 Dim th As Threading.Thread th = New Threading.Thread(AddressOf all) ths.Add(th) Next For h As Integer = 0 To ths.Count - 1 Dim co(2) As Control co(0) = d.Keys(h) co(1) = d.Values(h) Dim t As Threading.Thread = ths(h) t.Start(co) Next End Sub
RE: كيف الى تمرير اكثر من بارامتر الى المسار thread بشكل ديناميكي او اوتوماتيكي او تلقائي - Taha Okla - 02-09-22
ما شاء الله عليك - تبارك الرحمن - هذا ما كنت أقف بسببه
إذن خذ التحديث على الكود بعد الدمج بين الكودين
أفتح مشروع جديد وضع عليه زر واحد - والكود :
لاحظ المتغير (J) هو عدد أشرطة التمرير الذي تريده / بإمكانك وضعها بالكود نتيجة طريقة التقسيم التي تريد ..
كود :
Dim pTop As Integer = 4
Private Location_control As New Point(10, 50)
Dim i1 As Integer
Private Sub All(c As Control())
Dim pi As ProgressBar = CType(c(0), ProgressBar)
Dim l As Label = CType(c(1), Label)
For i As Integer = 1 To 100
pi.Invoke(Sub() pi.Value = i)
l.Invoke(Sub() l.Text = pi.Value)
Threading.Thread.Sleep(150)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim J As Integer = 5
Dim pProgress As ProgressBar() = New ProgressBar(J) {}
Dim lLable As Label() = New Label(J) {}
For i = 0 To J
pProgress(i) = New ProgressBar
pProgress(i).Name = "pProgressX" & i
pProgress(i).Location = New Point(Location_control.X + 10, Location_control.Y)
pProgress(i).Width = Me.Width - 100
pProgress(i).Height = 20
pProgress(i).Minimum = 0
pProgress(i).Maximum = 100
' pProgress(i).Value = 25
Location_control.Y += 10
Controls.Add(pProgress(i))
lLable(i) = New Label
lLable(i).Name = "lLableX" & i
lLable(i).Location = New Point(pProgress(i).Width + Location_control.X + 10, Location_control.Y)
lLable(i).Width = Me.Width - 30
lLable(i).Height = 20
lLable(i).Text = 0
Location_control.Y += 24
Controls.Add(lLable(i))
Next
'=========================================
Dim ths As New List(Of Threading.Thread)
Dim d As New Dictionary(Of ProgressBar, Label)
Dim pros As New List(Of ProgressBar)
Dim lbls As New List(Of Label)
For Each cl As Control In Me.Controls
Dim prog As ProgressBar = Nothing
Dim lbl As Label = Nothing
If TypeOf cl Is ProgressBar Then
prog = DirectCast(cl, ProgressBar)
pros.Add(prog)
ElseIf TypeOf cl Is Label Then
lbl = DirectCast(cl, Label)
lbls.Add(lbl)
End If
Next
For r As Integer = 0 To pros.Count - 1
d.Add(pros(r), lbls(r))
Next
For n As Integer = 0 To d.Count - 1
Dim th As Threading.Thread
th = New Threading.Thread(AddressOf All)
ths.Add(th)
Next
For h As Integer = 0 To ths.Count - 1
Dim co(2) As Control
co(0) = d.Keys(h)
co(1) = d.Values(h)
Dim t As Threading.Thread = ths(h)
t.Start(co)
Next
End Sub
RE: كيف الى تمرير اكثر من بارامتر الى المسار thread بشكل ديناميكي او اوتوماتيكي او تلقائي - سعود - 02-09-22
(02-09-22, 07:20 AM)Taha Okla كتب : ما شاء الله عليك - تبارك الرحمن - هذا ما كنت أقف بسببه
إذن خذ التحديث على الكود بعد الدمج بين الكودين
أفتح مشروع جديد وضع عليه زر واحد - والكود :
لاحظ المتغير (J) هو عدد أشرطة التمرير الذي تريده / بإمكانك وضعها بالكود نتيجة طريقة التقسيم التي تريد ..
كود :
Dim pTop As Integer = 4
Private Location_control As New Point(10, 50)
Dim i1 As Integer
Private Sub All(c As Control())
Dim pi As ProgressBar = CType(c(0), ProgressBar)
Dim l As Label = CType(c(1), Label)
For i As Integer = 1 To 100
pi.Invoke(Sub() pi.Value = i)
l.Invoke(Sub() l.Text = pi.Value)
Threading.Thread.Sleep(150)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim J As Integer = 5
Dim pProgress As ProgressBar() = New ProgressBar(J) {}
Dim lLable As Label() = New Label(J) {}
For i = 0 To J
pProgress(i) = New ProgressBar
pProgress(i).Name = "pProgressX" & i
pProgress(i).Location = New Point(Location_control.X + 10, Location_control.Y)
pProgress(i).Width = Me.Width - 100
pProgress(i).Height = 20
pProgress(i).Minimum = 0
pProgress(i).Maximum = 100
' pProgress(i).Value = 25
Location_control.Y += 10
Controls.Add(pProgress(i))
lLable(i) = New Label
lLable(i).Name = "lLableX" & i
lLable(i).Location = New Point(pProgress(i).Width + Location_control.X + 10, Location_control.Y)
lLable(i).Width = Me.Width - 30
lLable(i).Height = 20
lLable(i).Text = 0
Location_control.Y += 24
Controls.Add(lLable(i))
Next
'=========================================
Dim ths As New List(Of Threading.Thread)
Dim d As New Dictionary(Of ProgressBar, Label)
Dim pros As New List(Of ProgressBar)
Dim lbls As New List(Of Label)
For Each cl As Control In Me.Controls
Dim prog As ProgressBar = Nothing
Dim lbl As Label = Nothing
If TypeOf cl Is ProgressBar Then
prog = DirectCast(cl, ProgressBar)
pros.Add(prog)
ElseIf TypeOf cl Is Label Then
lbl = DirectCast(cl, Label)
lbls.Add(lbl)
End If
Next
For r As Integer = 0 To pros.Count - 1
d.Add(pros(r), lbls(r))
Next
For n As Integer = 0 To d.Count - 1
Dim th As Threading.Thread
th = New Threading.Thread(AddressOf All)
ths.Add(th)
Next
For h As Integer = 0 To ths.Count - 1
Dim co(2) As Control
co(0) = d.Keys(h)
co(1) = d.Values(h)
Dim t As Threading.Thread = ths(h)
t.Start(co)
Next
End Sub
وفقك الله لكل خير
اظن خلاص الان الفكرة وصلت والاكواد جاهزة للانتقال الى تطبيق او اضافة الميزة الى التطبيق البسيط
أسعدك الله سائر اليوم وكل الايام وكل من يقرا هذا الكلام.
RE: [تم الحل] انشاء المسارات وتمرير البارامترات لها وقت التشغيل - سعود - 03-09-22
حين لم انجح بتطبيق الفكرة بالملف البعيد لاعتبارات السيرفر و قوانينه ... فكرت ان احول الفكرة للاستخدام المحلي اقصد تقسيم الملف بنفس الاكواد هنا لكني انصمدت انه يتطلب القراءة المتكررة للملف المصدر وهذا ممنوع بويندوز.
بامكاني القراءة الكلية والتقسيم لكن هذا غير محبذ لان اساس الفكرة تقسيم الملف الكبير الى اجزاء.
على كل حال تخليت عن فكرة التحميل المتعددللملف البعيد والقريب وبقيت فكرة واحدة سانظر الى امكانية تطبيقها ان شاء الله.
و هي حفظ النقاط (لا ادري بماذا تسمى) وهي الموضع position . حتى حين الرغبة بالايقاف يتم الحفظ مثل فكرة wmp current position. وعند التشغيل واختيار الجلسة يتم الاستمرار....هذه اظنها سهلة و لابد من اكمالها ان تيسر ذلك.
صبحكم الله بالخير جميعا.
RE: [تم الحل] انشاء المسارات وتمرير البارامترات لها وقت التشغيل - Taha Okla - 03-09-22
وصبحكم الله بالصحة والعافية..
ليس المهم أن ينجح من أول مرة أو ثاني ...... أو حتى عاشر مرة..
بإمكانك أن تضع المشروع على جنب لفترة .. تكون فيها مستعد لاكماله..
المهم أن جزء من الفكرة موجودة عندك -
أصبح الآن لديك مشروع برنامج - حتى لو أنه غير مكتمل ..
فقد تمر خلال أيام أو شهور بأفكار تطور بها برنامجك لأفضل مما تتوقع..
= = = = = =
|