PDA

View Full Version : تفاوت threading با BackgroundWorker



negar.rafie
پنج شنبه 09 خرداد 1392, 20:01 عصر
دوستان تفاوت این دو در چیست؟
باید از کدوم استفاده کنیم؟

tooraj_azizi_1035
پنج شنبه 09 خرداد 1392, 20:13 عصر
BackgroundWorker خودش نوعی Threading هست. فرقی نمیکنه ولی BackgroundWorkerکار رو ساده کرده با رویدادهایی که داره مثل Completed و ...

negar.rafie
پنج شنبه 09 خرداد 1392, 21:15 عصر
اخه اقای danialafshari گفتند که مثلا اگر میخواهیم یه کار خاصی را انجام دهیم مثلا مقایسه زمان استفاده از backgroundworker بهینه نیست و باید از threeding استفاده کنیم
حالا کدام بهینه تر هستند؟

danialafshari
پنج شنبه 09 خرداد 1392, 22:00 عصر
اخه اقای danialafshari گفتند که مثلا اگر میخواهیم یه کار خاصی را انجام دهیم مثلا مقایسه زمان استفاده از backgroundworker بهینه نیست و باید از threeding استفاده کنیم
حالا کدام بهینه تر هستند؟

سلام
منظور من رو اشتباه گرفتید

مثلا فرض کنید ما در برنامه خود میخواهیم به صورت همیشگی یک زمان را با زمان جاری سیستم مقایسه کند و به محض برابر شدن یک کار خاصی انجام بدیم و استفاده از timer و bavkgroundworker هم بهینه نیست ایا در اینجا ما میتوانیم از اینها کمک بگیریم؟
به صورت همیشگی که گفتید یعنی برنامه همیشه در حال اجرا باشه و این بهتره با ویندوز سرویس باشه و در ویندوز سرویس بهتره از thread استفاده بشه همونطور که خودم استفاده می کنم

negar.rafie
جمعه 10 خرداد 1392, 08:34 صبح
من بیشتر گیج شدم
بزارید با یه مثال بگم
فرض کنید ما در برنامه خودمون یه زمان را داریم حالا میخوایم برنامه به صورت میشگی چک کنه وقتی با یه زمان دیگر برابر شد یه کاری انجام بده یا مثلا یه مثال دیگه فرض کنید ما مبخواهیم وقتی برنامه در حال اجرا است به محض این که کامپیوتر به اینترنت متصل شد هم یه کاری انجام بده و مثلا هایی از این قبیل
حالا با از چی استفاده کنم:
توابع wmi
ویندوز سرویس
threading
BackgroundWorker
wcf

negar.rafie
جمعه 10 خرداد 1392, 12:08 عصر
اگر برنامه همیشه باز بود از کدوم استفاده کنیم؟باز هم از همون ویندوز سرویس؟

negar.rafie
جمعه 10 خرداد 1392, 16:09 عصر
بله که میشه
فرض کنید ما یه برنامه یاداوری مطالب نوشتیم که مثلا یادداشتهایی که کاربر در تاریخ خواصی نوشته یاداوری بشه خوب در صورت برنامه همیشه در حال اجرا است و به محض اینکه تاریخ و ساعت یادداشت برابر باتاریخ و ساعت سیستم شد یپغام را نمایش بده
خوب در این باره ما چی میگید؟

danialafshari
جمعه 10 خرداد 1392, 17:02 عصر
بله که میشه
فرض کنید ما یه برنامه یاداوری مطالب نوشتیم که مثلا یادداشتهایی که کاربر در تاریخ خواصی نوشته یاداوری بشه خوب در صورت برنامه همیشه در حال اجرا است و به محض اینکه تاریخ و ساعت یادداشت برابر باتاریخ و ساعت سیستم شد یپغام را نمایش بده
خوب در این باره ما چی میگید؟

سلام
شما چرا اینقدر خودتون رو گیج می کنید؟
کار windows service، تکمیل windows application هست
بله اگر برنامتون همیشه بازه ، میتونه این کار رو انجام بده

windows service می تونه چک کنه ببینه برنامتون بستس یا نه و اگر نزدیک به اون تایم شد برنامه تون رو Run کنه
کلا بحث مفصلی داره
اگر برنامتون همیشه در حال اجراست می تونید در همون windows application کارتون رو انجام بدید

FastCode
جمعه 10 خرداد 1392, 17:10 عصر
برای این کار باید از AutoResetEvent و TimeChanged Event استفاده کنید.
بهتره یک مقدار با روش حل معادله نیوتون هم آشنا باشید که بتونید تناسب بین سرعت و دقت رو رعایت کنید بدون اینکه CPU کابر رو بسوزونید.

AutoResetEvent ev;
DateTime DesiredTime;
TimeSpan Granularity;
float GranularityRatio = 0.9f
Action action;
Thread thread;
bool abort = false;
main()
{
System.SystemEvents.TimeChanged+=Set;
thread = new Thread(wait);
thread.Start();

}
void Abort()
{
abort = true;//atomic
Set();
}
void Set(....)
{
ev.Set();
}
void wait()
{
while (!abort)
{
ev.Wait( (int)(((DesiredTime - System.DateTime.UtcNow).MilliSeconds) * GranularityRatio) );
if(((DesiredTime - System.DateTime.UtcNow).MilliSeconds) < Granularity.MilliSeconds)
{
if (!abort)//last moment cancel
action();
return;
}
}
}

FastCode
جمعه 10 خرداد 1392, 20:39 عصر
برای یاز نگه داشتن برنامه هم بهتره که از Tray Bar/Icon و Shortcut در StartUp Directory استفاده کنید.
چون نسبت به Windows Service و Startup با Registry کاربر پسند تر هستند.
اگر کاربر عادی بخواد برنامه شما رو از کار بندازه نمیتونه بره Windows Service رو پیدا کنه چون اصلا نمیدونه چی هست.برای همین مجبور میشه برنامه رو Unisntall کنه و ازش متنفر میشه.
افرادی هم که بلد هستن قالبا از Evolution و Outlook و .... استفاده میکنند چون EMail و Contact شون هم همونجاست و براشون راحتتره که همه چیزرو یک جا هماهنگ کنندv