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

tab with multithread

مغلق
بدأه akrm في 25 يناير 2007 · 2 رد · 692 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف يتم عمل tab بحيث تكون كل tapشغاله في thread لوحدها

#2

احد الحلول:

يمكنك استخدام Background worker لكل تاب بحيث تقوم بتنفيذ العمليات التي تريدها داخله

هذه ثلاث نقاط او خطوات موجودة في ال MSDN لكيفية عمل نداء لكنترول وتكون العملية threadsafe

اقتباس

How to: Make Thread-Safe Calls to Windows Forms Controls

Thread-Safe Calls to a Windows Forms Control

To make a thread-safe call a Windows Forms control

1-Query the control's InvokeRequired property.

2-If InvokeRequired returns true, call Invoke with a delegate that makes the actual call to the control.

3-If InvokeRequired returns false, call the control directly.

مثال:

لنفرض انه عندك في احد ال tabs مجموعة عمليات تتضمن حسابات ومن ثم عرض بعض النتائج على احد ال controls وليكن textbox

اولا تقوم بتكوين ال background worker اما بأخذه من صندوق الادوات ووضعه على الفورم او عن طريق اضافته للكود

private System.ComponentModel.BackgroundWorker bgw;
this.bgw = new System.ComponentModel.BackgroundWorker();
this.bgw.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgw_DoWork);
			this.bgw.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.bgw_RunWorkerCompleted);

ومن ثم عندما تريد ان تجعل العمليات في تاب معين ان تشتغل نتيجة لحدث معين , اجعل هذا ال worker يبدأ العمل

private void Form_Load(object sender, EventArgs e)
{
bgw.RunWorkerAsync();
}

بمجرد تشغيل هذا العامل فأن جميع العمليات سوف تتم بصورة منفصلة عن باقي برنامجك داخل event خاص بهذا العامل يسمى DoWork

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
//the things you want to execute in a separate space in your program
//if you want now to modify  a control that has been created in a different thread then you have to //invoke this control
}
private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.tb.text="modified text";
}

ولكن اذا كانت عملياتك تتظمن التغيير في خصائص بعض الكونترولز ومن ثم تنفيذ عمليات برمجية اخرى فهذا يتطلب منك عمل invoke لهذا الكنترول قبل التعامل معه

هذا رابط يبين كيفية التعامل مع هذه الحالة

How to Invoke a control.

وهذا رابط داخل ال MSDN يشرح بعض النقاط المهمة

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_fxmclictl/html/138f38b6-1099-4fd5-910c-390b41cbad35.htm

السلام عليكم

تم تعديل هذه المشاركة بواسطة ahmed_3d في 25 يناير 2007 في 17:06

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#3

جزاك الله كل الخير

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

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