PDA

View Full Version : کار متود Invoke چیست و چگونه باید استفاده کرد



HAMRAHSOFT.IR
شنبه 17 بهمن 1394, 23:31 عصر
روش استفاده از Invoke چگونه می باشد


base.Invoke(delegate {
this.progressBar1.Maximum = files.Length;
this.progressBar1.Value = 0;
this.progressBar1.Step = 1;
});


چرا خطا می ده


علت این خطا چی


Severity Code Description Project File Line
Error CS1660 Cannot convert anonymous method to type 'Delegate' because it is not a delegate type Updater

ژیار رحیمی
یک شنبه 18 بهمن 1394, 09:23 صبح
به اینصورت اصلاح کنید (خطای تبدیل نشدن متد ناشناخته به delegate میده شما باید delegate رو cast به (MethodInvoker)) کنی

base.Invoke((MethodInvoker)delegate {
this.progressBar1.Maximum = files.Length;
this.progressBar1.Value = 0;
this.progressBar1.Step = 1;
});

زمانی از Invoke استفاده میکنیم که از Threadی دیگر بخواهیم عناصر(UI) را در Main Thread اجرا میشه را دستکاری کنیم

HAMRAHSOFT.IR
یک شنبه 18 بهمن 1394, 09:49 صبح
ممنون میشه یک توضیح بیشتر بدید

base.Invoke(() => progressBar1.Value = i + 1);

ژیار رحیمی
یک شنبه 18 بهمن 1394, 10:00 صبح
توضیحات به پست قبلی اضافه شد .به این روش م میشه متد Invoke رو فراخوانی کرد.برای نمونه مثال و توضیحات بیشتر به لینک زیر مراجعه کنید
http://stackoverflow.com/questions/14703698/invokedelegate
و
https://msdn.microsoft.com/en-us/library/system.windows.forms.methodinvoker(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/zyzhdc6b(v=vs.110).aspx

HAMRAHSOFT.IR
یک شنبه 18 بهمن 1394, 11:17 صبح
ممنون میشه یک توضیح بیشتر بدید

base.Invoke(() => progressBar1.Value = i + 1);


طبق را هنما روفتم ولی این کده هر کاری می کنم نمیشه

ژیار رحیمی
یک شنبه 18 بهمن 1394, 14:43 عصر
به اینصورتم بنویس ببین به جواب میرسی.اگر به جواب نرسییدی با همان روش پست قبلی بنویس

base.Invoke(new Action(() => progressBar1.Value = i + 1));