PDA

View Full Version : سوال: این Delegate و Invoke چی هست؟



zaeimh90
شنبه 11 شهریور 1391, 00:19 صبح
سلام به همه.
بچه ها کسی میدونه این Delegate و Invoke ها چی هست و بهم توضیح بده.
میدونم تو مبحث چند نخی ها هست. ولی طرز استفادشو نمیدونم.
میشه با کد بهم بگین؟:قلب:
مشکل من اینه که تو یه thread نمیتونم به خواصیت enable یه تایمر یا قابلیت visible یه آبجکت دسترسی داشته باشم.قابل ذکر هست از CheckForIllegalCrossThreadCalls = False استفاده کردم و لی به این خصیصه ها نمیشه دسترسی داشت.ممنون میشم کسی کمکم کنه.

the king
شنبه 11 شهریور 1391, 02:17 صبح
سلام به همه.
بچه ها کسی میدونه این Delegate و Invoke ها چی هست و بهم توضیح بده.
میدونم تو مبحث چند نخی ها هست. ولی طرز استفادشو نمیدونم.
میشه با کد بهم بگین؟:قلب:
مشکل من اینه که تو یه thread نمیتونم به خواصیت enable یه تایمر یا قابلیت visible یه آبجکت دسترسی داشته باشم.قابل ذکر هست از CheckForIllegalCrossThreadCalls = False استفاده کردم و لی به این خصیصه ها نمیشه دسترسی داشت.ممنون میشم کسی کمکم کنه.

Delegate یک نمونه پروتوتایپ متد ئه، یعنی مشخص می کنه که فرضا متد باید فلان تعداد پارامتر از نوع داده فلان و خروجی از نوع داده فلان داشته باشه.
می توانید متغیری که از نوع Delegate می سازید رو به هر متدی که با تعریف اش مطابقت داشته باشه متصل کنید و فراخوانی کنید.
بعضی کلاس ها و متد ها قبل از اینکه متد مورد نظر شما رو فراخوانی کنند از شما Delegate اش را می خواهند، بنابر این اول باید Delegate مناسب اون متدی
که می خواهید فراخوانی بشه رو ساخته باشید.

Invoke کردن در موردی که شما منظورتونه، درخواست انجام کاری روی شیء است، اما نه توسط هر Thread ای یا Thread فعلی، بلکه توسط Thread ای
که روی اون شیء دسترسی کامل داره، فرضا برای کنترل های روی فرم، Thread ای که فرم رو نمایش میده همچین دسترسی ای رو داره.

شما هم برای رفع اون مشکل تون دو راه حل بیشتر ندارید :
1) برای تغییر Visible اون کنترل یک متد و یک Delegate بسازید و داخل Thread فرعی تون اون متد رو Invoke کنید تا Thread اصلی فرم اجرایش کنه.
2) از BackgroundWorker استفاده کنید و ReportProgress کنید تا رخداد ProgressChanged اتفاق بیافته. رخداد ProgressChanged توسط Thread اصلی فرم
اجرا میشه و داخلش هر کاری که مربوط به کنترل های فرم ئه می توانید بدون مشکل دسترسی انجام دهید.

مثال هم که توی انجمن فراوونه.

zaeimh90
شنبه 11 شهریور 1391, 20:59 عصر
ممنون از کمکت.
میتونی یه نمونه برام بزاری؟
ممنون

the king
شنبه 11 شهریور 1391, 21:53 عصر
ممنون از کمکت.
میتونی یه نمونه برام بزاری؟
ممنون

مثال روش اول :
92202

مثال روش دوم :
92203