منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة بسيطة في برنامج بسيط يعتمد على( Multi-Threading)
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
ألسلام عليكم ورحمة الله وبركاته ..

أخواني كيف حالكم ..

قررت اتعلم اسلوب Multi Threading ولكن في الحقيقة الامر اصعب من تعلم VB.net بحيث لايوجد لها مواد تعليمية واشرح مفصل لها ولا حلول لمشاكلها .

المهم برنامج برنامج تعليمي لاكتسب مهارات في هذا الاسلوب .

اولا برنامج يحتوي على Form1 و Module1

الــ Form1 يحتوي على التالي :  TextBox1.Text و Button1
والـModule1 يحتوي على Sub  بإسم Main
وبعد شرح أجزاء البرنامج  هذه الاكواد كاملة


Form1

كود :
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Dim Thread As New Threading.Thread(Sub() main())
       Thread.IsBackground = True
       Thread.Start()

   End Sub

و تانياً ألـ Module1

كود :
Module Dada
   Sub main()
       
       Dim Text As String = "Hello Word"
       Dim myDelegate As MethodInvoker
       myDelegate = New MethodInvoker(Sub() Form1.TextBox1.Text = Text)
       Form1.TextBox1.Invoke(myDelegate)


   End Sub
End Module


مشكلتي وهى كيف تغير النص الموجود داخل Textbox1 الى موجود في Form1 عن طريق Threading وطبعا اريد الكود الذي يقوم بتغير النص
او التحكم في Form1 موجود داخل Module1 وليس على نفس الـForm1 (علـــــماً بأن الكـــــود الســــــابق بــه خطـــا )
وهذه صورة الخطا الذي يظهر لي :



وجزاكم الله الف خيراً تتمنوه وتلقوه بإذنه تعالى .
PHP كود :
Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click

    Dim Thread 
As New Threading.Thread(Sub() main(Me.TextBox1"Hello Word"))
 
   Thread.IsBackground True
    Thread
.Start()

End Sub 

PHP كود :
Module Dada
    Sub main
(tb As TextBoxtxt As String)

 
       tb.Invoke(Sub() tb.Text txt)

 
   End Sub
End Module 
(12-05-17, 04:35 AM)mansoor كتب : [ -> ]
PHP كود :
Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click

    Dim Thread 
As New Threading.Thread(Sub() main(Me.TextBox1"Hello Word"))
 
   Thread.IsBackground True
    Thread
.Start()

End Sub 

PHP كود :
Module Dada
    Sub main
(tb As TextBoxtxt As String)

 
       tb.Invoke(Sub() tb.Text txt)

 
   End Sub
End Module 


اولا جزاك الله الف خيراً اخي وبارك الله فيك على التوضيح الحسن .. ولكن ماذا لو اردت الكود بهذا الشكل .. كيف اقوم بالتالي مثل هذه الصورة




بحيث بعد مااغيرها الى Ahmed كيف اغيرها في Sub اخر الى "asda" وشكراً
PHP كود :
Module Dada
    Sub main
(tb As TextBox)

        
tb.Invoke(Sub() tb.Text "Ahmad")

        
gaga(tb)

    
End Sub

    Sub gaga
(tb As TextBox)

        
tb.Invoke(Sub() tb.Text "asda")

    
End Sub

End Module 

ولكن لن ترى Ahmad لأنه سيتغير بسرعة
(12-05-17, 06:08 AM)mansoor كتب : [ -> ]
PHP كود :
Module Dada
    Sub main
(tb As TextBox)

 
       tb.Invoke(Sub() tb.Text "Ahmad")

 
       gaga(tb)

 
   End Sub

    Sub gaga
(tb As TextBox)

 
       tb.Invoke(Sub() tb.Text "asda")

 
   End Sub

End Module 

ولكن لن ترى Ahmad لأنه سيتغير بسرعة


في الحقيقة هذا جميل .. ولكن الامر ازداد تعقد لتطبيقه على برنامجي الحقيقي .
انا قمت برمجة برنامج بفكرة ذهبية ورائعة .. وهو يعمل بصورة صحيحة ويؤدي عمله . ولكن المشكلة في موضوع البطئ وتجمد البرنامج ..
كنت متردد في رفع السورس كاملا لحل المشكلة قبل الانتهاء منه . ولكن سوف ارفعه .. لعل قد تساعدني  في عمل threading عليه ويصبح اسرع قليلا مما هو عليه الان ..

اتمنى منك مساعدتي به
السلام عليكم
أخي mansoor
في الحقيقة كلمة شكراً لاتكفيك لقد كنت سنداً لي في وقت الحاجة .. رغم اني تجولت في النت وبحتث على حل للمشكلة لم اجد شي يفيدني
وفي الحقيقة لم ينجح معي ولاكود او مقالة فكانت كلها غير ناجحة ...
بالرغم من ذلك نجح معي الامر معك فـ اكوادك كانت مفيدة لي وتمكنت من اصلاح البرنامج وايقاف التجمد للبرنامج ...
كنت اتمنى ان ارسل لك رسالة خاصة تعبيراً على شكري لك وامتناني اليك ولكن لم اتمكن من ذلك فـ الخاصية غير مفعلة معك ..
كل مااقوله لك . هو جزاك الله الف خيراً تتمناه وتلقاه بإذنه تعالى .. واطلب الله ان ينير قلبك ودربلك وصلاتك ويجعلك روضاً من رياض الجنة..
انت بالفعل تستحق دعوة منبعها القلب .. لقد ساعدتني اخي شكرا جزيلاً لك ..