السلام عليكم ورحمة الله وبركاته
أثناء عمل البرنامج احتاج لجمع الكثير من الصور في FlowLayoutPanel1
طبعا لكثرة عدد الصور فإن شاشة الصور تظل غير ظاهرة للمستخدم لأكثر من 10 ثوان تقريباً حسب كمية الصور بهذه الحالة المفضل لي أن استخدم دالة تقول بجعل المستخدم يرى تعبئة البيانات أمامه حتى لا يشعر أن البرنامج هنق أو علق ؟
يأتي دور الدالة My.Application.DoEvents وضعتها في أماكن معينة من التطبيق ولكنها لا تعمل على الوجه الصحيح ؟
فالسؤال كيف يكون الاستخدام الصحيح للدالة ؟
سلام
ممكن توضح مساله 10 ثوان
الا يمكنك استخداك backgroundworker بدل DoEvents ؟
موفقين
(18-06-15, 03:46 PM)الطالب كتب : [ -> ]سلام
ممكن توضح مساله 10 ثوان
الا يمكنك استخداك backgroundworker بدل DoEvents ؟
موفقين
وعليكم السلام
مسألة 10 ثوان هي: لدي زر يفتح نافذة يتم عرض فيها عدد كبير من الصور حدث جلب الصور يتم عمله مع تشغيل النافذة load طبعاً تظل النافذة غير مرئية لمدة 10 ثوان ثم تظهر وهي محملة جميع الصور، الذي أريده هو أن تتم عملية تحميل الصور أمام المستخدم حتى لا يشعر أن البرنامج به تهنيج.
ياليت لو تبين لي ولو باختصار عمل backgroundworker إن كان هو الأنسب.
سلام
ال 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
موفقين