إضافة رد

  #1  
قديم 02-12-2010, 02:56 AM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس 13: Multi-Threading دورة C#

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

في درسنا اليوم سوف ندرس ال Multi-Threading (( المسارات المتعددة )) وهي مهمة جدا لأي برنامج يحوي على عمليات خارجية مثل القيام بفحص للفيروسات من قبل برنامج Anti-Virus أو جلب أسماء ملفات ما وما شابه ذلك...

سوف نستخدم في هذا الدرس المجال
System.Threading.Thread
لذلك قم من الان باستيراده

تبيين فائدة ال Multi-Threading ...

سوف أقوم بمقارنة مباشرة لذلك أولا سوف نستخدم برنامج لجلب أسماء الملفات بنفس الThread قم سوف نقوم ببرنامج اخر يقوم بنفس الوظيفة ولكن يستخدم Multi-Threading ...
وسوف يقوم البرنامج بعد جلب أسماء الملفات بكتابتها في ملف نصي...

البرنامج الأول: ( Single Threading ):

قم بإنشاء مشروع WindowsFormsApplication جديد وضع به Button

الكود البرنامج بعض وضع الأداة كاملا (( للإختصار )):

كود PHP:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 
WindowsFormsApplication20
{
public 
partial class Form1 Form
{
public 
Form1()
{
InitializeComponent();
}
System.Collections.ArrayList myarr = new System.Collections.ArrayList();
private 
void button1_Click(object senderEventArgs e)
{
if (
System.IO.Directory.Exists("c:\test") == false
{
System.IO.Directory.CreateDirectory(@"c:\test");
}
foreach (
string x in System.IO.Directory.GetFiles(@"c:\windows\system32"))
{
myarr.Add(x);
}
System.IO.StreamWriter myw = new System.IO.StreamWriter(@"c:\test\mytest.txt");
foreach (
string fx in myarr)
{
myw.WriteLine(fx);
}
myw.Close();
}
}

جرب البرنامج بالضغط على الButton ولاحظ... سوف يتوقف البرنامج عن العمل لمدة حوال 1 ثانية ثم يتم إضافة أسماء الملفات الموجودة في c:\windows\system32 إلى الملف...
حسنا الان مع حوال 2000 ملف توقف البرنامج لمدة 1 ثانية ماذا لو كنا نود عمل فحص للكومبيوتر كاملا؟؟؟؟ سوف يتوقف البرنامج عن العمل لمدة قد تصل إلى 30 دقيقة أو أكثر (( الشيئ متعلق بسرعة الكومبيوتر وكمية الملفات ))
(( ملاحظة إذا لم تلاحظ توقف الكومبيوتر فأعد التجربة في مكان يحوي على ملفات أكثر ))

--- وهنا ومن أجل ذلك تم إختراع مبدأ ال multi-threading حيث أصبح بإمكانك عمل كل تحركاتك دون أي تأثير على أداء البرنامج لنأخذ مثال على نفس البرنامج مع ال multi-threading

ضع أيضا نقس الأدوات السابقة (Listbox,Button) واكتب الكود التالي:

كود PHP:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 
WindowsFormsApplication20
{
public 
partial class Form1 Form
{
public 
Form1()
{
InitializeComponent();
}
System.Collections.ArrayList myarr = new System.Collections.ArrayList();
private 
void button1_Click(object senderEventArgs e)
{
System.Threading.Thread mythread = new System.Threading.Thread(dowork);
mythread.Priority System.Threading.ThreadPriority.Lowest;
mythread.Start();
}
private 
void dowork()
{
if (
System.IO.Directory.Exists("c:\test") == false)
{
System.IO.Directory.CreateDirectory(@"c:\test");
}
foreach (
string x in System.IO.Directory.GetFiles(@"c:\windows\system32"))
{
myarr.Add(x);
}
System.IO.StreamWriter myw = new System.IO.StreamWriter(@"c:\test\mytest.txt");
foreach (
string fx in myarr)
{
myw.WriteLine(fx);
}
myw.Close();
MessageBox.Show("Progress Completed!");
}
}

سوف تلاحظ عمل نفس الشيئ ولكن دون أي توقف أو بطئ للبرنامج مهما كان عدد الملفات...

أهم ما في الفئة Thread ...

1- Start وهي لبدأ ال Thread
2-Suspend لإيقاف الThread مؤقتا...
3- Abort لإيقاف ال Thread تهائيا...
4- Resume لإكمال ال Thread
5- IsBackGround ... جاء وقت شرحها...

إن ال BackGround Thread تتشابه بحد كبير مع ال Thread العادي ولكن الفرق يكمن بينهما في ما يلي...

أولا ضع Button وكتب في الحدث Click الخاص به:

كود PHP:
System.Threading.Thread.CurrentThread.Abort(); 
سوف تلاحظ أن البرنامج توقف عن العمل ولكن لماذا؟؟؟؟

السبب:
لم يعد هناك أي Fore Thread حي ولذلك تم إغلاق البرنامج ...

نتيجة... :إذا لم هناك أي Fore Thread قيد الإستخدام يغلق البرنامج...

أما لو كان ال Thread الذي يعمل مع برنامجك بشكل إفتراضي مع BackGround Thread فلن تراه في عمرك ...

فحتى لو كان هناك BackGround Thread حي و لا يوجد أي Fore Thread فسوف يغلق البرنامج دون أن يهتم بالباقي....

أما العكس فليس صحيح..

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


إلى اللقاء في الدرس القادم إن شاء الله....

منقول من منتدى فيجوال بيسك للعرب


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
  #2  
قديم 02-13-2010, 03:45 AM
الصورة الرمزية المشتاقة للجنة
المشتاقة للجنة المشتاقة للجنة غير متواجد حالياً

مراقبة عامة

 
تاريخ التسجيل: Nov 2009
المشاركات: 4,422
افتراضي

ماشاء الله شـكــ وبارك الله فيك ـــرا لك


رد مع اقتباس
  #3  
قديم 02-14-2010, 02:31 AM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي

وفيكم بارك الله


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
  #4  
قديم 10-15-2010, 07:02 AM
الصورة الرمزية ماريا إسلام
ماريا إسلام ماريا إسلام غير متواجد حالياً

عضو متألق

 
تاريخ التسجيل: Oct 2010
العمر: 35
المشاركات: 268
افتراضي

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

أحببتُ أن أنوه إلى وجود هذه العبارة :


اقتباس
ضع أيضا نقس الأدوات السابقة (listbox,button) واكتب الكود التالي:

حيث الكود لايحتوي عليها لأنه لا يحتاج إلى هذه الأدواات ،،

وفقكم الله ورفع قدركم في الدنياا والآخرة

وزادكم نورااا وتُقى ،،

بالتوفيق ،،

//


توقيع : ماريا إسلام

ربي هذا العهد لك ... عزم القلب الوفا

تستطيع أن ترى الصورة بحجمها الطبيعي بعد الضغط عليها

تستطيع أن ترى الصورة بحجمها الطبيعي بعد الضغط عليها

صفحتي على الفيسبوك!

رد مع اقتباس
إضافة رد

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس 10: تعرف على أهم ال Controls دورة ال C# khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-31-2010 09:41 PM
الدرس 8: أمثلة عملية على ما مضى دورة الـ c# khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 08:01 PM
الدرس 4: طرق إستخدام ال void و ومجالاتها (دورة C#) khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 07:55 AM
الدرس 3: المتغيرات والثوابت (دورة الـ c#) khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 06:44 AM
الدرس 7: التعامل مع الملفات دورة الـ c# khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 4 10-13-2010 07:04 PM

استضافة الحياة

الساعة الآن 02:37 AM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz