PDA

View Full Version : نمونه مثالی از استفاده Threading با زبان سی شارپ (استفاده از delegate )



em_developer
دوشنبه 20 آذر 1391, 00:17 صبح
چند نخی تکنیکی است که برای اجرای همروند چند عمل استفاده می شود
یکی از تکنیک های استفاده از چند نخی ایجاد یک delegate از یک متد است، در زیر نمونه کدی در این باره آمده است، این نمونه کد در کنسول است:



class Program

{

public delegate int TakeAWhileDelegate(int data, int ms);

static void Main(string[] args)

{

// synchronous method call

// TakesAWhile(1, 3000);

// asynchronous by using a delegate

TakeAWhileDelegate d1 = TakesAWhile;

IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);

while (!ar.IsCompleted)

{

// doing something else in the main thread

Console.Write(".");

Thread.Sleep(100);

}

int result = d1.EndInvoke(ar);

Console.WriteLine("result: {0}",result);

Console.Read();

}

static int TakesAWhile(int data, int ms)

{

Console.WriteLine("TakesAWhile started");

Thread.Sleep(ms);

Console.WriteLine("TakesAWhile completed");

return ++data;

}

}

در کد با استفاده از اینترفیس IAsyncResult و استفاده از متد BeginInvoke در حین اجرا شدن یک نخ با استفاده از نخ اصلی برنامه هر بار یک نقطه در کنسول چاپ می کند و با استفاده از متد استاتیک کلاس Sleep نخ جاری که همان نخ اصلی است را به حالت معلق در می آورد.

در این کد به خوبی مفهوم انجام دو کار مختلف با هم با استفاده از نخ نشان داده شده است.

برای توضیحات کامل تر به کتاب

Wrox Professional C#‎‎ 2008 Published byWiley Publishing, Inc

به Chapter 19: Threading and Synchronization مراجعه کنید.

samadblaj
دوشنبه 20 آذر 1391, 01:16 صبح
public delegate int TakeAWhileDelegate(int data, int ms);
سلام دوستان چرا اینجا از delegate استفاده شده ؟

em_developer
دوشنبه 20 آذر 1391, 17:47 عصر
public delegate int TakeAWhileDelegate(int data, int ms);
سلام دوستان چرا اینجا از delegate استفاده شده ؟

delegate در لغت به معنی نماینده است, در زبان سی شارپ به دلیل ایجاد امنیت دسترسی به توابع به صورت مستقیم در فرواخوانی ها انجام نمی گیرد بلکه با استفاده از delegate ها به عنوان نماینده اجرا کننده تکه کدی خواص استفاده می شود.

zare69
سه شنبه 21 آذر 1391, 11:02 صبح
با سلام
میشه ی مثال برای c# قرار بدید در WindowsFormsApplication
با تشکر