تجربه ی کار با Thread در سی شارپ

سلام. امروز داشتیم رو یه پروژه ی نرم افزار ویندوزی که با سی شارپ نوشتیم کار می کردیم برای اپدیتش؛ یه مشکلی داشتیم. مسئله اینجا بود که میخواستیم طرف ببینه اینترنتش وصله یا قطعه اگه وصل بود با رنگ سبز بنویسه مثلا “به اینترنت متصل هستید” یا “اینترنت قطع هست”. ایده ی کلی چیز ساده ای بود که خب تو ورژن قبلی با یه timer که interval ش رو روی ۳۰۰۰۰ میلی ثانیه گزاشته بودیم حل شد تقریبا. ولی چون موقع لود شدن برنامه تا سی ثانیه بعد نتیجه رو نمایش نمیداد مجبور شدیم روی رویداد Form Load فرم هم اون تابعی که برای بررسی اصال به اینترنت نوشته بودیم رو صدا بزنیم.

ولی مشکل این بود که وقتی برنامه رو باز می کردیم چون یه پینگی از یه جا می گرفت یکم طول میداد و توی اون لحظه (تقریبا ۱ الی ۲ ثانیه) من نمیتونستم کاری بکنم یعنی اون برنامه درگیره. خب برای اینکار ایده ی Background Worker رو داشتم و از قبل میدونستم که همچین چیزی هست. میشه یه Thread جدید درست کرد که تو یه حلقه با شرط Trueتا بینهایت یه کاری بکنه اما سیستم هنگ نباشه. در واقع توی بک گراند این کار رو بکنه.

توی رویداد لود فرم اصلی این کد رو گزاشتم تا یه Task به Background Worker معرفی کنم و گفتم انجامش بده.

[code] backgroundWorker1.DoWork += backgroundWorker1_DoWork; backgroundWorker1.RunWorkerAsync(); [/code]

بعد توی خود Background Worker اومدم کدهایی کی میخوام هی اجرا بشن رو نوشتم.

[code] private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while (true) { // check inrternet connection Netchecker netchecker = new Netchecker(); if (netchecker.CheckForInternetConnection()) { netIsConnect = true; } else { netIsConnect = false; } Thread.Sleep(10000); } } [/code]

در واقع یه کلاس نوشتم که توش یه متد netchecker هست برای بررسی وصعیت اینترنت که نهایتا True و False برمیگردونه. و توی این خط ها اومدم چک کردم اگر نتیجش True بود توی یه متغیر true میریزم. بعد توی یک تایمر هر چند ثانیه فقط مقدار اون متغیرو چک می کنم و یه پیام توی یک لیبل نمایش میدم. همین.

اینطوری برنامه خیلی سریعتر شده و کار ها موازی با هم پیش میرن. این کارو خیلی جاها لازمه انجام بدیم تا برنامه کند نشه و یه سری کار ها توی بک گراند انجام بشن.

خب تجربه ی جالبی بود برام. من تخصصم سی شارپ نیست ولی برنامه نویس باید بتونه هر زبونه که نیاز داره رو یادبگیره و ازش لذت ببره و کار بقیه رو هم راه بندازه و از این طریق درامد داشته باشه.

Thread در سی شارپ
اینم یه عکس که شاید از حرفای من واضح تر باشه براتون 🙂

شاد و پیروز و البته سلامت باشد.


ادریس رنجبر

برنامه نویس و مدرس برنامه نویسی

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *