منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] أين اضع My.Application.DoEvents - نسخة قابلة للطباعة

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



أين اضع My.Application.DoEvents - عبد الله - 18-06-15

السلام عليكم ورحمة الله وبركاته

أثناء عمل البرنامج احتاج لجمع الكثير من الصور في FlowLayoutPanel1

طبعا لكثرة عدد الصور فإن شاشة الصور تظل غير ظاهرة للمستخدم لأكثر من 10 ثوان تقريباً حسب كمية الصور بهذه الحالة المفضل لي أن استخدم دالة تقول بجعل المستخدم يرى تعبئة البيانات أمامه حتى لا يشعر أن البرنامج هنق أو علق ؟

يأتي دور الدالة My.Application.DoEvents وضعتها في أماكن معينة من التطبيق ولكنها لا تعمل على الوجه الصحيح ؟

فالسؤال كيف يكون الاستخدام الصحيح للدالة ؟


RE: أين اضع My.Application.DoEvents - الطالب - 18-06-15

سلام

ممكن توضح مساله 10 ثوان

الا يمكنك استخداك backgroundworker بدل DoEvents ؟

موفقين


RE: أين اضع My.Application.DoEvents - عبد الله - 18-06-15

(18-06-15, 03:46 PM)الطالب كتب : سلام

ممكن توضح مساله 10 ثوان

الا يمكنك استخداك backgroundworker بدل DoEvents ؟

موفقين

وعليكم السلام

مسألة 10 ثوان هي: لدي زر يفتح نافذة يتم عرض فيها عدد كبير من الصور حدث جلب الصور يتم عمله مع تشغيل النافذة load طبعاً تظل النافذة غير مرئية لمدة 10 ثوان ثم تظهر وهي محملة جميع الصور، الذي أريده هو أن تتم عملية تحميل الصور أمام المستخدم حتى لا يشعر أن البرنامج به تهنيج.

ياليت لو تبين لي ولو باختصار عمل backgroundworker إن كان هو الأنسب.


RE: أين اضع My.Application.DoEvents - الطالب - 18-06-15

سلام

ال backgroundworker هو عمل كود في الخلفية دون تعليق البرنامج

بحثت وجمت لك مثال اتوقع راح يكون ما تبحث عنه
كود :
Public Class Form1

   Dim WithEvents gbWorker As New System.ComponentModel.BackgroundWorker

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       gbWorker.RunWorkerAsync()

   End Sub




   Private Delegate Sub AddControl()

   Private Sub gbWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles gbWorker.DoWork

       ' كود تحميل الصور هنا

       ' هذا مثال لعرض الصور الموجودة في مجلد الصور

       ' حلقة التكرار في هذا الحدث
       Dim files() As String = IO.Directory.GetFiles("C:\Users\Admin\Pictures", "*.jpg", IO.SearchOption.AllDirectories)
       For Each FileName As String In files

           Dim Invoker As New AddControl(Sub()
                                             ' استدعاء اجراء
                                             AppentPictureBox(Image.FromFile(FileName))
                                         End Sub)
           FlowLayoutPanel1.Invoke(Invoker, Nothing)

           ' هذا السطر مجرد تأخير نصف ثانية لمشاهدة سير العمل فقط يمكن حذفه لا حقا
           Threading.Thread.Sleep(500)

       Next

   End Sub


   Sub AppentPictureBox(ByVal image As Image)
       Dim p As New PictureBox
       p.Image = image
       FlowLayoutPanel1.Controls.Add(p)
       FlowLayoutPanel1.ScrollControlIntoView(p) ' هذا السطر يجعل المسطره تتحرك للاسفل لمشاهده المضاف اخيرا
   End Sub


End Class

موفقين