میشه اینن دستور را توضیح بدین ممنون.
میشه اینن دستور را توضیح بدین ممنون.
اگه میشه دقبقا توضیح بدین دستورات و پارامترها را . یکم پیچیده است گیج میشم نمیدونم پارامترهاش چیه و چرا اینطور نوشته میشه.
سلام جستجوی فایل هایی که نام آنها با حرف a شروع و با هر پسوندی تو تمام دایرکتوری های موجود در سیستم است.
ابتدا یه Task تعریف شده که آیتمهای لیست باکس رو خالی میکنید و دکمه رو به حالت غیر فعال میبرد. بعد تمام فایل هارو با شاخص موجود در سیستم درون متغییر fileInfo میریزه و با استفاده از حلقه foreach به صورت موازی(اینم یک Task میباشد) تک تک فایل های درون لیست fileInfo به تاخیر 0.3 ثانیه به تابع currentFile ارسال میکند.احتمالا تابع currentFile که در کد شما وجود ندارد کار افزودن آیتم به لیست باکس رو انجام بدهد
چرا اینطور نوشته شده؟ این قطعه کد سه کار متفاوت رو انجام میدهد.اگر این کدهارو بدون استفاده از Task و یا Thread نوشته میشد راندمان کار پایین میومد بدین صورت ابتدا listbox ایتم هاش خالی میشد و بعد از اتمام کار اول به سراغ جستجوی فایل و در آخر کار افزودن ایتم ها.تا اتمام این سه کار UI در حالت قفل در میاد و راندمان کار و سرعت اجرا پایین میامد.با تقسیم کار بین کار و ایجاد Task اجرای هر کدوم از کارها رو به یک cpu داده میشود و الان 3 cpu به طور همزمان هر کدام بخشی از کارو انجام میدهند که سرعت کار به مراتب بالاتر میرود اگه سه کارو با یه cpu انجام بدیم تفاوت و راندمان آن نسبت به حالت استفاده از Task روشن و بدیهی ست.پیشنهاد من اگه آشنایی یا تجربه کار با Task و یا Thread رو نداری تا زمانی که تسلط وتجربه کافی بدست نیاوردی ازش اسفاده نکن.
try
{
listBox.Items.Clear();
button.Enabled = false;
var fileInfo = info.EnumerateFiles("a*.*", SearchOption.AllDirectories);
foreach (var item in fileInfo)
{
currentFile(item.FullName, listBox, button);
}
}
catch { };
کد بالا رو جایگزین کن.زیاد مهم نیست حالا همزمانی نداشته باشه چون یه پروژه دانشجویی هست ایتمهای درون لیست از 200 ، 300 تا بیستر نمیشه بهتره حذف شه چون ممکنه سوال پرسیده شود و آشنایی باهاش نداری تو دردسر میفتی.کد رو تو ایتور فروم نوشتم تست نکردم رو سیستم اگر خطای داد بگین
آخرین ویرایش به وسیله Mahmoud.Afrad : چهارشنبه 31 تیر 1394 در 22:09 عصر
کسی دستورات موازی را بلد نیست عایا؟
Task اوصلا به چند شیوه ییاده سازی میشود. خط اول یه نمونه استفاده از Task با استفاده از Factory هست داخل تابع StartNew() پارامتر اول آن دستوراتی که قرار Task انجام بده به صورت inline و به شیوه عبارت لامدا ()=> اشاره به بدنه دستورات میکنه که با { شورع و با } پایان دستوراتی که Task باید انجام بدهد رو مشخص کرده.و بعد از آن پارامتر دوم StartNew مشخص کرده که آیا امکان لغو یا کنسل سازی Task هست ک مقدارآن CancelationToken.none که امکان کنسل کردن غیر فعال و پارامتر بعدی تابع StartNew() یه متغییری هست به نام uiSchedulerاز نوع TaskScheduler هست که در ابتدای برنامه بصورت public تعریف کرده .میزسیم به خط Parallel.Foreach.قبل از اجرای این دستور ما تمام فایل های با الگوی مورد جستجو را در متغییر fileInfo ریختیم.تعداد فایل ها میتونه از 0 تا هر چندتا باشه حالا ما فرض میکنینم تعداد فایل های یافت شده 5000تا باشه Parallel.Foreach بصورت موازی دو یا چند Task رو بطور موازی که هر Task روی یک cpu در حال اجرا میباشد تولید و لیست را بستگی به تعداد به چند بخش تقسیم گرده ممکن است 4 تا Task بصورت موازی و به هر Task تعداد 1250 آیتم از بدهد و پردازش هر قسمت رو یکی از Task های تولید شده توسط Paralle.Foreach انجام میدهد.