PDA

View Full Version : سوال: معادل این کد رو کی می دونه ؟



mdssoft
پنج شنبه 28 شهریور 1387, 23:20 عصر
سلام به همه دوستان .
چند وقت پیش من این کد رو برای دسترسی به اشیای یه App از طریق چند Thread اینجا (http://thispointer.spaces.live.com/blog/cns%2174930F9313F0A720%21252.entry?_c11_blogpart_b logpart=blogview&_c=blogpart&action=post&wa=wsignin1.0) پیدا کردم .

void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)( ()=>
{
this.ProgressBar.Value = e.ProgressPercentage;
}));
} اما خوب متوجه اون نشدم .
میشه معادل این کد رو بنویسید یا کمی توضیح دهید !

SMRAH1
پنج شنبه 28 شهریور 1387, 23:32 عصر
سلام
در MSDN در توضیح رویداد WebClient..::.DownloadProgressChanged Event کد زیر را آورده است:


// Sample call : DownLoadFileInBackground2 ("http://www.contoso.com/logs/January.txt");
public static void DownLoadFileInBackground2 (string address)
{
WebClient client = new WebClient ();
Uri uri = new Uri(address);

// Specify that the DownloadFileCallback method gets called
// when the download completes.
client.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCallback2);
// Specify a progress notification handler.
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgre ssCallback);
client.DownloadFileAsync (uri, "serverdata.txt");
}به عبارت دیگر هرگاه بخواهید فایلی را از طریق web دانلود کنید کافیست یک شی WebClient را ساخته و یک شی Uri (حاوی آدرس فایل مقصد) رو به اون پاس بدید.برای انکه شی WebClientfi به شما بتونه هر لحظه گزارشی (از نظر حجم دانلود شده و ..) کافی به رویداد DownloadProgressChanged شی WebClient ،متدی شبیه بالا را متصل کنی.در این صورت هر لحظه پیغامی برای اون رویداد می فرسته.در بدنه تابع هم فقط مقدار شی ProggressBar (که احتمالا قبلا ساخته شده و روی فرم قرار داره) رو به روز می کنه تا کاربر رو از این مطلب مطلع کند.

در مورد Dispatcher هم برای همگام سازی Thread ها استفاده شده.در واقع هرگاه از WPF استفاده کنید.با این دستور می تونید thread مسئول به روز رسانی ظاهر فرم (UI یا User interface) را مجبور به کار کنید!!!!

موفق باشی

mdssoft
پنج شنبه 28 شهریور 1387, 23:35 عصر
من منظورم توضیح دادن کلاس ها نبود.
ساختار کد بود.
مثلا این چیه :


this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)( ()=>
{
this.ProgressBar.Value = e.ProgressPercentage;
}));

esmartiz_red
پنج شنبه 28 شهریور 1387, 23:39 عصر
یعنی می خواین بفهمین این کد چه کار می کنه ؟

mdssoft
پنج شنبه 28 شهریور 1387, 23:47 عصر
یعنی میخوم بدونم معادل این کد چیه .
فکر می کنم Lambda expressions باشه

Amir Oveisi
جمعه 29 شهریور 1387, 01:49 صبح
بله دوست عزیز lambda expression هست. lambda expression‌همون anonymous متد هست که syntax ساده تری پیدا کرده.
اطلاعات بیشتر (http://msdn.microsoft.com/en-us/library/bb397687.aspx)

موفق باشید
jooje

mdssoft
جمعه 29 شهریور 1387, 02:12 صبح
ممنون
اما ممکن هست معادل این کد رو برای یادگیری بیشتر بنویسید
خیلی ممنون میشم

Amir Oveisi
جمعه 29 شهریور 1387, 02:30 صبح
delegate void UpdateProgressBarDelegate();
UpdateProgressBarDelegate ud = delegate() { this.ProgressBar.Value = e.ProgressPercentage;
};
this.Dispatcher.Invoke(DispatcherPriority.Normal,u d);

موفق باشید
jooje