منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] [تم الحل] انشاء المسارات وتمرير البارامترات لها وقت التشغيل - نسخة قابلة للطباعة

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



[تم الحل] انشاء المسارات وتمرير البارامترات لها وقت التشغيل - سعود - 02-09-22

أرجو ان تنجح مع التحميل لاجزاء الملف عن بعد

السؤال كيف نقوم بتوليد المسارات وفقا لاجراء او نتيجة اجراء معين؟
مثلا :
100 / 5
نولد مسارات Thread بعدد الناتج.
كيف يكون هذا؟


RE: فائدة على الهامش تمرير اكثر من بارامتر الى المسار thread - سعود - 02-09-22

صباح الخير
هل يمكن ام لاSmile


RE: فائدة على الهامش تمرير اكثر من بارامتر الى المسار thread - Taha Okla - 02-09-22

(02-09-22, 06:03 AM)سعود كتب : صباح الخير
هل يمكن ام لاSmile

صباح الأنوار

أظن يمكن ..
وصلت لجزء من فكرة الحل .. ووقفت ..
وهذا هو الجزء .. 
أفتح مشروع جديد وضع عليه زر واحد ..

ثم أفتح محرر الاكود لنافذة وضع فيها هذا الكود ..
كود :
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.ObjectAs System.EventArgsHandles Button2.Click
        Dim ths 
As New List(Of Threading.Thread)
 
       Dim d As New Dictionary(Of ProgressBarLabel)
 
       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(clProgressBar)
 
               pros.Add(prog)
 
           ElseIf TypeOf cl Is Label Then
                lbl 
DirectCast(clLabel)
 
               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

وصبحكم الله بالصحة والعافية..

ليس المهم أن ينجح من أول مرة أو ثاني ...... أو حتى عاشر مرة..
بإمكانك أن تضع المشروع على جنب لفترة .. تكون فيها مستعد لاكماله..

المهم أن جزء من الفكرة موجودة عندك - 
أصبح الآن لديك مشروع برنامج - حتى لو أنه غير مكتمل ..
فقد تمر خلال أيام أو شهور بأفكار تطور بها برنامجك لأفضل مما تتوقع..

=  =  =  =  =  =