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

تنفيذ الأوامر بعد form_load تلقائيا

مغلق
بدأه Romantic_touch في 3 أغسطس 2006 · 11 رد · 1,670 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم جميعا

اخواني انا اعرف ان المشكلة في threading و ال synchronizing ولكن مالحل؟

ما اريده هو انه بعد ان يقوم البرنامج ببناء الفورم كاملا يقوم بتنفيذ مجموعة اوامر تتعلق بحسابات معينة ثم ترجع البيانات وتعيدها في الكنترول اللي ع الفورم

لاني واجهت مشكلة عندما انفذ الأوامر من نفس حدث form_load حيث يحدث ان الاوامر ليس كلها تنفذ بشكل سليم

واكتشفت ذلك باني اضفت ازرار جديد ووضعت نفس الأوامر في حدث click فبعد انتهاء بناء النموذج اضغط عليه وتنفذ الأوامر بشكل سليم ولكن عندما وضعتها نفسها في اخر حدث form_load لا تنفذ كلها بشكل صحيح

علما اني استخدما thread ولكن اواجه مشكلة في تمرير arguments لانه يلزمني ان تكون arguments ومعظم الباراميترات عندي اما integer او string

فما الحل

تم تعديل هذه المشاركة بواسطة Romantic_touch في 3 أغسطس 2006 في 10:45

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#2

حقيقة لم أفهم السؤال جيدا لكن في ما يتعلق بالجزء الخاص بعمل Thread و تمرير Arguments لها يمكنك و بما انك تستعمل ال VB2005 ان تستعمل الصنف الجديد BackGroudWorker و هذا درس لكيفية التعامل معها أتمنى ان يفيدك

http://ayoub.awardspace.com/Mag/index.php?...4&Itemid=26

و هناك درس آخر في الموضوع المتبث الخاص بدروس الفجوال 2005 و هو درس للأخ الغملاسي ... أتمنى ان يكون هذا ما تبحث عليه و اذا لم يكن كذلك فأرجو منك ايضاح المشكل أكثر

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

#3

أخي الكريم

سأفوم بتجربة ماتحدثت عنه

ولكن لتوضيح السؤال سوف اعيد صياغته

لدي نموذج به عدة اوامر في الحدث load اخر امر يقوم باستدعاء دالة تقوم بعمل حسابات معينة ثم اظهار النتائج في داتا جريد

المشكلة ان استدعاء الدالة من خلال الحدث load بشكل صحيح اي ان بعض القيم لا تظهر وبحسب علمي ان المشكلة تكمن في threading و synchronazaition لاني قمت باضافة زر ووضعت في حدثclick نفس الدالة وقمت بالضعط على الزر فتنفذت العملية بشكل سليم

فهل الطريقة التي ذكرت تضمن لي ان تنفيذ العملية بعد الانتهاء من تنفيذ رسمGUI ؟ التي تقوم mainthread بتنفيذها؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#4

معلومة بسيطة يمكن تفيدك

وقت بتفتح الفورم بيتنفذ الحدث Load أولا ثم الحدث Activated

أما عن تمرير الـ Arguments لـ thread فإذا متذكر صح بيكون عبر ما يدعى بـ Shared Members يعني إذا عرفت متغير شبيه بالتالي

Public Shared TestArg As String = " Some String Here"

بتقدر تستخدموا كعنصر تمرير قيم بين الـ thread و الفورم تبعك

تم تعديل هذه المشاركة بواسطة samerselo في 5 أغسطس 2006 في 10:33

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

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

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

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

#5

اخي الكريم انا قرات ماكتبت وجربت مااشرت

ولكن انا مشكلتي ليس في هذا بالتمام

ولكن المشكلة هيه في كيف اقوم بتنفيذ جملة بعد الانتهاء من الحدث load مباشرة؟

اما الحدث activated فهو جيد ولكن مشكلته انه سوف يتم تنفيذه عند كل مرة تفقد الفورم الfocus وترجع تاني

وهذا سيسبب بطء في النظام او استهلاك ليس له مبرر حيث اني لا اريد تنفيذ الجملة الا مرة واحدة فقط بعد حدث load

تم تعديل هذه المشاركة بواسطة Romantic_touch في 5 أغسطس 2006 في 12:00

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#6

حل عالسريع بس مو شرط انه الأفضل حط متغير من نوع Boolean وبعد ما تنفذ العملية المرة التي تريدها غير قيمته وبهذا لايتم تنفيذ هذا الكود الا وقت بتريد في الحدث Activated

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

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

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

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

#7

كنت ابحث عن حل اكثر احترافية

اذا كان فيه بس اذا مافي فالحل هذا يقوم بالواجب

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#8

نعم أخي Romantic الطريقة التي أعطيتك تقوم بانشاء Thread جديدة و تنفذها حاول تجربتها او قم بارفاق المثال حتى احاول التعديل عليه و اعطائك النتيجة

#9

قد يساعد معرفتنا للكود الذي تقوم بتنفيذه في الحدث Load على حل المشكلة...

و بالمرة جرب استدعاء()ResumeLayout ربما تنفع..

رأس الحكمة الإيمان بالله

#10

بصراحة الكود عبارة عن كود داخل برنامج كبير وصعب ان اعرضه

ولكن المشكلة بحسب علمي انه يتم تغير البيانات في الداتا جريد قبل بناء الداتا جريد بشكل نهائي ثم يتم تكمله بناء الداتا جريد فتتغير القيم بطريقة غير مألوفة

لدرجة ان ترتيب الاعمدة لايأتي بحسب ما بنيته انا بالكود ولا ماهو في ترتيب جملة الاستعلام

وضعت الكود في الحدث activated فاشتغل بشكل جيد جدا وساجرب ResumeLayout ولكن المشكلة كلها في ان هذه الحداث معظمها قد يتم تنفيذه بعد بناء النموذج مما يسبب اعادة استدعاء للدالة مما يسبب استهلاك ليس له اي معنى ويسبب اخطا في حال تم تعديل البينات يدويا حيث ان تنفيذ الدالة مرة اخرى سيسبب تغير للقيم التي كتبت يدويا

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#11

السلام عليكم،،،

اخى كما قال لك الاخ محمد عبدالعليم عرض الكود يساعد فى فهم المشكلة ولا داعى لعرض كل التطبيق الجزء الخاص فقط،،،،

ايضا جرب الحدث Shown وهو ينفذ عند عرض الفورم للمرة الاولى فقط ،،وللعلم فهذا الحدث جديد ولن تجده الا اذا كنت تستخدم vb2005

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#12

الف شكر اخوي سولو فعلا زبط معاي لحدث

shown

وهو افضل من activated لمثل حالتي هذي

يعطيكم العافية شباب :)

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

هذا الموضوع مغلق.

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