بعد التركيز في الكود الي كتبته يتضح انك حاولت تستدعي showdialog من خلال ثريد فرعي وهذا صحيح ولكن ايضا هناك شرط ليكون الامر فعالا وهو ان انشاء كائن الفورم نفسه يجب ان يكون في الثريد الفرعي كذلك ، ولذلك الكود الاساسي الذي كتبته لك كان فعالا ..
بالنسبة للمشكلة الي حصلت بسبب السكين وعدم عمله بشكل سليم ، ذلك والله العالم لان الديف اكسبرس لايعمل بشكل مضبوط في الثريدات الفرعية
سأجرب الان شغلة وارجع لك
--
اخوي ابو ليلى تحياتي لك ولجميع الاخوة في المنتدى والله اشتقنا لكم ..
تسلم أستاذنا الشاكي لله و سلم يمنك و دينك
المشكلة أخي الكريم لا تظهر عند فتح فورم عادي .. التوقف سيكون ثانية أو ثانيتين
لكن التوقف سنلاحظه بوضوح مثلا عند ما أتعمد جعل فورم تجريبي يحتوي على SpreadSheet أو RichEditControl
تحياتي واحتراماتي
للاسف حاولت اجعل الويب براوزر يعمل في ثريد فرعي ولكن ظهر معي خطأ معناه انه لايمكن جعل كونترول تم تكوينه في ثريد فرعي في الفورم الذي تم تكوينها بالثريد الاساسي ..
ولكن الكود الاولي الذي كتبته لك كان فعالا:
كود :
Private Sub SurroundingSub()
Dim th As Thread = New Thread(Sub()
'انشاء كائن الفورم يجب ان يكون هنا
Dim form As Form2 = New Form2()
'اظهار الفورم
form.ShowDialog()
End Sub)
th.SetApartmentState(ApartmentState.STA)
th.Start()
End Sub
فيه حل تلويصي اخر وهو جعل الwebbrowser في فورم منفصلة وتقوم بتشغل الفورم بنفس طريقة الكود اعلاه
ولكي لايلحظ المستخدم ان الويب براوزر يشتغل في window منفصلة ، هنا يمكنك اللعب على خصائص الفورم مثل اخفاء الcontrol bars (زر الاغلاق والتكبير والتصغير) ، وايضا تجعل مكان الفورم هذي فوق المكان المخصص للعرض ، واسناد خاصة owner ..
ساعطيك مثالا على ذلك في لحظات ..
إلهي يبارك فيك و لك و يعطيك ما تتمناه بمحبة الله و مرضاته إن شاء الله
تفضل اخوي ،
في هذا المثال المكتوب بالسي شارب ستجد هناك الفورم الرئيسية (form1) تحاول تشغيل الفورم الفرعية form2 (تشغيل هذه الفورم يحتاج 3 ثواني)
الان عندما نريد ان نضع ويب براوزر لتشغيل صورة متحركة في الفورم1 ستصادفنا مشكلة التهنيق عندما نحاول فتح الفورم2 وذلك بسبب انشغال الثريد
ماقمت بعمله في المثال التالي هو حذف الويب براوزر من الفورم1 ونقله الى فورم جديدة خالية من كلشيء ، ومن ثم تشغيل هذا الفورم فوق المكان المطلوب لتبدو وكانها داخل الفورم1 حقا، ولكنها داخل فورم اخرى تم انشائها في ثريد اخر .
يمكنك مراجعة المثال ورؤيته كيف يعمل :
تفضل هذا الكود للفورم1 كاملا محول للفيجوال بيسك
كود :
Public Partial Class Form1
Inherits Form
Private webBrowserForm As Form = DirectCast(Nothing, Form)
Public Sub New()
InitializeComponent()
Form1.CheckForIllegalCrossThreadCalls = False
CreateWebBroser()
End Sub
Private Sub CreateWebBroser()
Dim th As Thread = New Thread(Sub()
'انشاء كائن الفورم يجب ان يكون هنا
webBrowserForm = New Form()
webBrowserForm.StartPosition = FormStartPosition.Manual
webBrowserForm.FormBorderStyle = FormBorderStyle.None
webBrowserForm.ShowInTaskbar = False
CalculateWebBrowserFormLocationAndSize()
webBrowserForm.Owner = Me
webBrowserForm.Controls.Add(New WebBrowser() With {
.Url = New Uri("https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif"),
.Dock = DockStyle.Fill
})
'اظهار الفورم
Application.Run(webBrowserForm)
End Sub)
th.SetApartmentState(ApartmentState.STA)
th.IsBackground = True
th.Start()
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Call New Form2().ShowDialog()
End Sub
Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateWebBrowserFormLocationAndSize()
End Sub
Private Sub Form1_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateWebBrowserFormLocationAndSize()
End Sub
Private Sub CalculateWebBrowserFormLocationAndSize()
If webBrowserForm Is Nothing Then Return
If webBrowserForm.InvokeRequired Then
webBrowserForm.Invoke(New Action(AddressOf CalculateWebBrowserFormLocationAndSize))
Else
webBrowserForm.Location = PointToScreen(panel1.Location)
webBrowserForm.Size = panel1.Size
End If
End Sub
End Class
تمت الاستعانة ب panel1 هو بانل فاضي مهمته يكون الplaceholder للمكان المفترض يطلع فيه الفورم الي فيه الويب براوزرد
المثال علمته على السريع لذلك لك حرية التصرف في عمل تحسينات له
..
موفقين
السّلام عليكم و رحمة الله و بركاته
بارك الله فيك أستاذنا الفاضل الشاكي لله و في كل السادة الأساتذة المحترمين الذين قدّموا العون من قريب أو من بعيد
سأحاول تجميع كل هذه الأفكار النيّرة بمشروع واحد و أضعه للإستغادة
تقبلوا كامل إحترامي و امتناني و عرفاني بجميلكم و جميل أعمالكم
تحياتي للجميع
السلام عليكم
هل جربت العمل بـ BuckgroundWorker ؟
(18-10-20, 10:19 PM)larbihamri كتب : [ -> ]السلام عليكم
هل جربت العمل بـ BuckgroundWorker ؟
لم أجرب هذه الطريقة أخي العربي
أكون لك جد شاكر لو تعمل مثال بسيط حول فتح فورم بهاته الطريقة للتعلّم
بارك الله فيك و لك و جزاك خير الجزاء مقدما
تحياتي
(19-10-20, 02:05 AM)عبد العزيز البسكري كتب : [ -> ] (18-10-20, 10:19 PM)larbihamri كتب : [ -> ]السلام عليكم
هل جربت العمل بـ BuckgroundWorker ؟
لم أجرب هذه الطريقة أخي العربي
أكون لك جد شاكر لو تعمل مثال بسيط حول فتح فورم بهاته الطريقة للتعلّم
بارك الله فيك و لك و جزاك خير الجزاء مقدما
تحياتي
هذا شرح شامل خفيف لها أخى عبد العزيز