تبلیغات
مرجع عملی و کاربردی زبان سی شارپ ، تصاویر دیدنی ، دانلود نرم افزار های گوناگون - اصول اولیه OOP و دات نت فریمورک

اصول اولیه OOP و دات نت فریمورک

نویسنده :مرتضی عالمین
تاریخ:چهارشنبه 30 اردیبهشت 1388-04:44 ب.ظ

1-مفاهیم بنیادین شیء گرایی

1-3-اینترفیس، رویداد، Delegate, Threading :

 

غیر فعال کردن یک رویداد در زمان اجرا


گاهی لازم است در زمان اجرا یک رویداد رو موقتا و یا برای همیشه غیر فعال کنیم. برای اینکار با استفاده از =- ایونت هندلر مورد نظر را از رویداد حذف میکنیم.

مثال - فرض کنید که در جایی لازم است مقدار یک TextBox رو عوض کنیم بدون آنکه بخواهیم رویداد TextChanged آن تحریک شود (البته در اینجا بصورت موقت و بعد از تخصیص مقدار آن را به حالت اول برمیگردانیم) :کد:

private void button1_Click(object sender, EventArgs e)

{

    // remove event handler

    textBox1.TextChanged -= new EventHandler(textBox1_TextChanged);

    textBox1.Text = "salam";

    // add event handler

    textBox1.TextChanged += new EventHandler(textBox1_TextChanged);

}

private void textBox1_TextChanged(object sender, EventArgs e)

{

    ....

    MessageBox.Show("TextChanged");

    ....

}

یک مثال ساده از پیاده سازی delegate


فرض کنید متود ساده زیر را داریم و میخواهیم به عنوان پارامتر به متود دیگری ارسال کنیم

کد:

 public void DisplayNumber(int num)
     {
            MessageBox.Show(string.Format("The value is  {0}", num)); 
     }

ابتدا نوع داده ای جدیدی ازdelegate با همین signature یعنی از نوع void و با پارامتر ی از نوع int تعریف می کنیم:

کد:

public delegate void ProcessNumber(int number);

سپس متغیری از نوع داده ا ی delegate تعریف شده به صورت زیر اعلان میکنیم :

کد:

ProcessNumber pn = new ProcessNumber(DisplayNumber);

حال میتوان این متغیر را به عنوان پارامتر به هر متود دلخواهی صادر کرد (مثلا متود زیر):

کد:

public int MultiplyNumbers(int a, int b, ProcessNumber pn)
     {
           int op = a * b;
           pn(op);
           return op;
     }

با این فراخوانی :

کد:

MultiplyNumbers(4, 5, pn);

منبع:سری های آموزشی TestOut c# for programmers
http://www.testout.com

کار با کنترل های تولید شده توسط یک Thread‌از طریق Thread ی دیگر


فرض کنیم یک تابع داریم که کاری بر روی یک Label‌ انجام میدهد.
میخواهیم این تابع را با استفاده از یک Thread‌دیگر فراخوانی کنیم. دقت کنید که Label توسط thread‌اصلی برنامه ایجاد شده و نمیتوان بصورت عادی به آن دسترسی داشت و با cross-thread exception‌مواجه میشویم.

برای این کار طبق روش زیر میتوان عمل کرد:

کد:

using System.Threading;

thread‌ی که برای تابع مورد نظر تعریف میکنیم :

کد:

Thread t = new Thread(new ThreadStart(this.DoSomeThing));

برای تعریف تابع مورد نظر باید به نکات زیر توجه داشته باشیم:

-
زمانی که کنترل مورد نظر ما (در اینجا label‌) دارای مقدارtrue ‌برای خاصیت InvokeRequired باشد ما باید تابع خود را بصورت cross-thread‌ فراخوانی کنیم. برای اینکار از متد Invoke استفاده میکنیم که یک Delegate به عنوان پارامتر میگیرد و آنرا بصورت cross-thread‌ فراخوانی میکند.

-
زمانیکه کنترل مورد نظر دارای مقدار false برای خاصیت InvokeRequired‌خود باشد میتوانیم کارهای مورد نظرمان را بر روی آن انجام دهیم.

پس ما باید در ابتدا delegate‌ی به متد مورد نظرمان تعریف کنیم و با استفاده از آن و به شکل زیر متد خود را تعریف میکنیم :

کد:

void DoSomeThing()

{

if(label.InvokeRequired)

{

delegate void myDelegate();

myDelegate del = new myDelegate(this.DoSomeThing);

Invokde(del);

}

else

//something to do on label here

}

 




داغ کن - کلوب دات کام
نظرات() 
Can exercise increase your height?
شنبه 1 مهر 1396 05:30 ب.ظ
Thanks for the marvelous posting! I really enjoyed reading it, you will be a great
author.I will make certain to bookmark your blog and
will eventually come back from now on. I want to encourage you to definitely continue your great
writing, have a nice evening!
How much does it cost for leg lengthening?
پنجشنبه 16 شهریور 1396 07:05 ق.ظ
Very energetic blog, I enjoyed that bit. Will there be a part 2?
marcelleherdon.hatenablog.com
شنبه 31 تیر 1396 08:05 ق.ظ
Thanks for finally writing about >مرجع عملی و کاربردی زبان
سی شارپ ، تصاویر دیدنی ، دانلود نرم افزار های گوناگون
- اصول اولیه OOP و دات نت فریمورک <Liked it!
foot pain gabapentin
چهارشنبه 21 تیر 1396 01:22 ق.ظ
These are genuinely impressive ideas in regarding blogging.
You have touched some fastidious factors here.

Any way keep up wrinting.
BHW
سه شنبه 29 فروردین 1396 05:35 ق.ظ
I visit every day a few web sites and websites to read
articles or reviews, except this blog offers feature based posts.
manicure
دوشنبه 21 فروردین 1396 06:13 ب.ظ
Greate post. Keep writing such kind of info on your blog.
Im really impressed by your blog.
Hi there, You have performed an excellent job.
I'll definitely digg it and in my opinion recommend to my friends.
I am sure they'll be benefited from this site.
محمد
چهارشنبه 30 اردیبهشت 1388 04:41 ب.ظ
سلام وبلاگ خوبی دارید.
یک سیستم کسب درآمد جدید می خوام بهتون معرفی کنم که سقف پرداخت نداره .
یعنی اینکه 15 هر ماه هر چقدر کلیک داشته باشید پرداخت میکنه حتی اگر فقط 1000 تومان باشه.
لینکش هم تو قسمت آدرس وب گذاشتم خود به خود وارد سایت کسب درآمد میشید
یه مزیتی هم که داره اینه که پایین بنر تبلیغاتی دیگه هیچ نوشته نداره .
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر




Admin Logo
themebox Logo