PDA

View Full Version : استفاده از تایمر یا ویندوز سرویس



negar.rafie
سه شنبه 23 خرداد 1391, 12:32 عصر
سلام دوستان
من می خوام وقتی کاربر به اینترنت وصل شد یه کاری انجام بدم
حالا ایا یه تایمر بزارم که مثلا هر یک دقیقه چک کنه ببینه به اینترنت وصل است یا نه یا از ویندوز سرویس یا چیز دیگه ای استفاده کنم

بهروز عباسی
دوشنبه 05 تیر 1391, 21:27 عصر
درود به شما دوست عزیز

حالا ایا یه تایمر بزارم که مثلا هر یک دقیقه چک کنه ببینه به اینترنت وصل است یا نه یا از ویندوز سرویس یا چیز دیگه ای
من با C# آشنای چندانی ندارم اما برای چنین مواردی بهتره ار Hook کردن رو توابع اتصال به اینترنت استفاده کنید.

موفق باشید

vof.ir
دوشنبه 05 تیر 1391, 22:48 عصر
سلام
خب این هم مهم هست که چه جوری به اینترنت وصل شده؟
کانکشن دیال آپ؟ شبکه ؟ وایرلس؟

negar.rafie
سه شنبه 06 تیر 1391, 09:45 صبح
فرقی نمیکنه کدوم کانکشن باشه حالا فرض کنید Adsl

aserfg
سه شنبه 06 تیر 1391, 10:03 صبح
Task Scheduler بهترین گزینه برای شماست .

Esmail Solhkhah
سه شنبه 06 تیر 1391, 10:10 صبح
من می خوام وقتی کاربر به اینترنت وصل شد یه کاری انجام بدم
حالا ایا یه تایمر بزارم که مثلا هر یک دقیقه چک کنه ببینه به اینترنت وصل است یا نه یا از ویندوز سرویس یا چیز دیگه ای استفاده کنم تفاوت ویندوز اپلیکیشن و ویندوز سرویس در ساده ترین حالت اینه که سرویسها عمدتا فاقد GUI هستن و همونطوری که اسمشون مشخصه برا سرویس دهی بکار میرن

تو خود ویندوز سرویس شما تایمر داخلی ندارید، مگه اینکه یه سر به دل و روده ویندوز بزنید و ببنید این بابا ویندوز موقع وصل شدن به یه کانکشن چی میده چی میگیره.

به عنوان مثال همین SQL SERVER خودمون در اصل یه ویندوز سرویس هست که موقع استارت شدن سرویس رو پورت های TCP یا هر کوفت رو زهر مار دیگه ای در ساده ترین حالت

کامند میگیره جواب پس میده

و دوست دیگمون Management Studio هم به این سرویس وصل میشه و مثلا وقتی شما دارید یه دیتابیس میسازید کامند مربوطه رو به این سرویس پاس میده.

موفق باشید.

aserfg
سه شنبه 06 تیر 1391, 10:25 صبح
تو خود ویندوز سرویس شما تایمر داخلی ندارید، مگه اینکه یه سر به دل و روده ویندوز بزنید و ببنید این بابا ویندوز موقع وصل شدن به یه کانکشن چی میده چی میگیره.نیازی به این کار نیست، همان طور که در بالا گفتم باید یک وظیفه زمان بندی شده تعریف کنند اینها در واقع همان سرویسهای ویندوزی با قابلیت زمان بندی شدن و تکرار و شروع خودکار هستند . هر بار خروجی تابعی مانند ذیل که تشخیص اتصال به اینترنت را برعهده دارد چک نمایند :

/// <summary>
/// Method used to check for internet connectivity by piging
/// varoaus websites and looking for the response.
/// </summary>
/// <returns>True if a ping succeeded, False if otherwise.</returns>
/// <remarks></remarks>
public bool isConnectionAvailable()
{
//build a list of sites to ping, you can use your own
string[] sitesList = { "www.google.com", "www.microsoft.com" , "www.psychocoder.net" };
//create an instance of the System.Net.NetworkInformation Namespace
Ping ping = new Ping();
//Create an instance of the PingReply object from the same Namespace
PingReply reply;
//int variable to hold # of pings not successful
int notReturned = 0;
try
{
//start a loop that is the lentgh of th string array we
//created above
for (int i = 0; i <= sitesList.Length; i++)
{
//use the Send Method of the Ping object to send the
//Ping request
reply = ping.Send(sitesList[i], 10);
//now we check the status, looking for,
//of course a Success status
if (reply.Status != IPStatus.Success)
{
//now valid ping so increment
notReturned += 1;
}
//check to see if any pings came back
if (notReturned == sitesList.Length)
{
_success = false;
//comment this back in if you have your own excerption
//library you use for you applications (use you own
//exception names)
//throw new ConnectivityNotFoundException(@"There doest seem to be a network/internet connection.\r\n
//Please contact your system administrator");
//use this is if you don't your own custom exception library
throw new Exception(@"There doest seem to be a network/internet connection.\r\n
Please contact your system administrator");
}
else
{
_success = true;
}
}
}
//comment this back in if you have your own excerption
//library you use for you applications (use you own
//exception names)
//catch (ConnectivityNotFoundException ex)
//use this line if you don't have your own custom exception
//library
catch (Exception ex)
{
_success = false;
_returnMessage = ex.Message;
}
return _success;
}

//Example Useage
If(!(isConnectionAvailable))
{
//then do something
}
{
//then do something
}

negar.rafie
سه شنبه 06 تیر 1391, 12:04 عصر
میشه اموزش مختصر برای استفاده از Task Scheduler در سی شارپ معرفی کنید

Mask
سه شنبه 06 تیر 1391, 12:12 عصر
بر اساس تجربه Task Scheduler زیاد مطمئن وتضمینی نیست.
شما یا باید از هوک استفاده کنید یا با یه سرویس که در اون یه تایمر در زمان مشخص ارتباط اینترنتی رو چک میکنه، عملیات مورد نظرتون رو انجام بدید.

negar.rafie
سه شنبه 06 تیر 1391, 12:21 عصر
بر اساس تجربه Task Scheduler زیاد مطمئن وتضمینی نیست.
شما یا باید از هوک استفاده کنید یا با یه سرویس که در اون یه تایمر در زمان مشخص ارتباط اینترنتی رو چک میکنه، عملیات مورد نظرتون رو انجام بدید.

میشه درباره هوک و سرویس بیشتر توضیح بدین کدوم بهتره؟

Y_Safaiee
سه شنبه 06 تیر 1391, 12:46 عصر
با سلام خدمت شما

چرا کدی نمی نویسین که در داخل یک ترد که حلقه بینهایت داره به یک سایت مثلا گوگل Request بده و در صورت جواب دادن سایت بفهمه اینترنت برقراره و در صورت پاسخ ندادن سایت با نمایش پیغام به کاربر اطلاع بده اینترنت نداره؟

یا همین کارو توسط دستور API


[DllImport("WININET", CharSet = CharSet.Auto)]
static extern bool InternetGetConnectedState(ref InternetConnectionState lpdwFlags, int dwReserved);



انجام نمیدین

اینطوری که ساده تره,چون داخل ترد هم هست هیچ گونه تاثیری روی سرعت برنامتون نداره

aserfg
سه شنبه 06 تیر 1391, 13:06 عصر
میشه اموزش مختصر برای استفاده از Task Scheduler در سی شارپ معرفی کنید

http://www.codeproject.com/Articles/2407/A-New-Task-Scheduler-Class-Library-for-NET



بر اساس تجربه Task Scheduler زیاد مطمئن وتضمینی نیست.!!!

اگر دلایل عدم اطمینان رو بفرمایید ممنون می شم

Esmail Solhkhah
چهارشنبه 07 تیر 1391, 10:17 صبح
خب اگه نخایم قضیه رو برا دوستمون یکم پیچیده کنیم با اجازه اساتید بنده کلاس NetworkChange (http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkchange.aspx) رو پیشنهاد میکنم.

عمو گیتس در این باره قشنگ توضیحات لازمه رو داده (روح باباش شاد)