الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في العمل مع تعدد المسارات Multithreading

بدأه COMFORT في 13 مارس 2008 · 4 رد · 942 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخواني الافاضل لدي مشكلة بسيطة عندما أعمل مع أكثر من مسار

لدي الآن دالة تقوم بإحضار بعض البيانات من قاعدة بيانات ، هذه الدالة أقوم باستدعائها

من Thread آخر و يبدأ عمله في الحدث Form_Load

حتى الآن لا توجد مشاكل ، المشكلة تحدث أحياناً إذا أغلق النموذج قبل أن ينتهي المسار من عمله .

و يظهر لي خطأ نصه كالتالي :

"Invoke or BeginInvoke cannot be called on a control until the window handle has been created."

أنا لاأستخدم الااة Background Worker

الاداة السابقة تحتوي على الخاصية cancellation و أنا أستخدم

الكود كالتالي :

Dim t as new Thread(AddresOf MySub)
t.start()

حاولت أحلها و لكني عجزت .

و جزاكم الله خيراً .

تم تعديل هذه المشاركة بواسطة COMFORT في 13 مارس 2008 في 22:02

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#2

يرجى ارفاق مثال عملي عما تحاول فعله حتى نستطيع مساعدتك

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

المثال مرفق

Problem.rar

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#4

سبب حدوث هذه المشكلة هو أنه عند استدعاء الدالة Invoke يجب أن يكون للنافذة مقبض Handle ويصدر الخطأ الذي يحصل معك في إحدى حالتين الأولى هي أنه لم يتم إنشاء النافذة بعد أو أنه قد تم تدميرها فعلا

لذا يجب علينا تجنب إغلاق النافذة قبل أن ينتهي الإجراء وإحد الحلول السريعة - ربما لايكون الأفضل ولكنه الذي خطر لي حاليا - هو باستخدام متغير Shared نفحص قيمته في الحدث FormClosing قبل السماح للنافذة بالإغلاق وفيما يلي الكود الخاص بنافذتك بعد اقتراحي هذا

Public Class Form1
	Dim WithEvents dtSet As New ContactsDataSet
	Dim WithEvents taCountries As New ContactsDataSetTableAdapters.tblCountryTableAdapter

	Private Shared Working As Boolean = False

	Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
		If Working = True Then e.Cancel = True
	End Sub

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Working = True
		Dim t As New Threading.Thread(AddressOf FillDataSet)
		t.Start()

		Me.Close()
	End Sub

	Private Sub ShowData()
		ComboBox1.DisplayMember = "CountryName"
		ComboBox1.ValueMember = "CountryID"

		ComboBox1.DataSource = dtSet.tblCountry.ToList
	End Sub

	Delegate Sub ShowDataDelegate()
	Dim dd As ShowDataDelegate

	Private Sub FillDataSet()
		Working = True
		taCountries.Fill(dtSet.tblCountry)

		dd = New ShowDataDelegate(AddressOf ShowData)
		Me.Invoke(dd)
		Working = False
	End Sub

End Class

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 14 مارس 2008 في 18:26

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

جزاك الله خيراً أخي محمد سأستخدم هذه الفكرة حالياً و لكن إذا

توصلت إلى حل آخر أرجو أن تخبرني به .

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif

مواضيع مشابهة