PDA

View Full Version : مشکل با دو تایمر به این صورت...



ghamgin
جمعه 17 خرداد 1392, 16:52 عصر
سلام
من میخوام برنامه ام هر ده ثانیه چک کنه ببینه برنامه مثلا نوت پد باز هست یا نه اگر باز بود یک تایمر دیگه فعال بشه
و بصورت شمارنده زمان باز بودن نوت پد رو بشماره و وقتی نوت پد بسته شد
اون زمانی که شمرده رو در یک مسیج باکس نشون بده
اما نمیدونم چطور باید این کارها رو انجام بدم
ممنون میشم
کمکم کنید
منتظرم..

mehrdad1991h
جمعه 17 خرداد 1392, 18:04 عصر
سلام
من میخوام برنامه ام هر ده ثانیه چک کنه ببینه برنامه مثلا نوت پد باز هست یا نه اگر باز بود یک تایمر دیگه فعال بشه
و بصورت شمارنده زمان باز بودن نوت پد رو بشماره و وقتی نوت پد بسته شد
اون زمانی که شمرده رو در یک مسیج باکس نشون بده
اما نمیدونم چطور باید این کارها رو انجام بدم
ممنون میشم
کمکم کنید
منتظرم..

یه سوال چرا 2 تایمر ؟ با 1 دونه تایمر هم میشه !
ولی بیا با همون 2 تا که خودت میگی برات توضیح میدم
بار اول که برنامه باز میشه تایمر اول راه میوفته چک میکنه برنامه بازه یا بسته
اگر باز بود که هیچی
اگر بسته بود بازش میکنه

و نهایتا کار مشترک در هر 2 حالت اینه که تایمر اول متوقف میشه و تایمر دوم شروع به کار میکنه

خوب الان در تایمر دوم هر 1 ثانیه یا کمتر چک میکنی برنامه بازه یا خیر
الان 2 حالت هست یا بازه یا بسته
اگر باز بود ادامه میدهد
اگر بسته بود تایمر دوم متوقف میشه زمان را یه جا ذخیره یا نمایش میدهد و تایمر اول دوباره شروع به کار میکنه و 10 ثانیه بعد دوباره چک میکنه ببینه برنامه بسته یا نه و این روند همینجوری ادامه دارد تا هرجا خودت بخوای دیگه ....!!!!

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

(با 1 تایمر هم اینجوری عمل میکنی که یه متغیر بولین در نظر میگیری و اگر برنامه باز بود true میکنیش و اگر بسته بود false بعد توی تایمر همون کار ها که با 2 تا تایمر میکردی را کد هاش را داخل 1 تایمر مینویسی و میگی اگر متغیر true بود این کدها اجرا بشه اگر false بود اون کدها و.... برای توضیح فکر میکنم در همین حد و روش ها کفایت کنه براتون)

موفق باشید

tooraj_azizi_1035
جمعه 17 خرداد 1392, 20:26 عصر
بررسی باز بودن یک App:


public bool IsProcessOpen(string name)
{
foreach (Process clsProcess in Process.GetProcesses()) {
if (clsProcess.ProcessName.Contains(name))
{
return true;
}
}
return false;
}


با استفاده از رویداد Exited یک Process هم می تونید از پایان یافتن پردازش مطلع بشید. فکر می کنم نیازی به استفاده از تایمر نیست چون خود شیء Process دارای رویداد Exited هست و وقتی پردازش پایان می یابد Fire می شود.

با خاصیت ExitTime هم می تونید زمان خروج رو بدست بیارید.

ghamgin
شنبه 18 خرداد 1392, 09:16 صبح
بررسی باز بودن یک App:


public bool IsProcessOpen(string name)
{
foreach (Process clsProcess in Process.GetProcesses()) {
if (clsProcess.ProcessName.Contains(name))
{
return true;
}
}
return false;
}


با استفاده از رویداد Exited یک Process هم می تونید از پایان یافتن پردازش مطلع بشید. فکر می کنم نیازی به استفاده از تایمر نیست چون خود شیء Process دارای رویداد Exited هست و وقتی پردازش پایان می یابد Fire می شود.

با خاصیت ExitTime هم می تونید زمان خروج رو بدست بیارید.

سلام
ممنون دوستان
نمونه کد ندارید
من توی کد تایمرها (دومی) موندم..

ghamgin
شنبه 18 خرداد 1392, 16:40 عصر
ممنون درست شد جواب گرفتم فقط
این رویداد Exited کجاست و چطور باید ازش استفاده کنم

tooraj_azizi_1035
شنبه 18 خرداد 1392, 16:50 عصر
باید خاصیت EnableRaisingEvents رو اول True کنید بعد به این شکل زمان باز بودن یک پردازش رو بدست بیارید:

{
Process myProcess= Process.GetProcessesByName("notepad").First();
myProcess.EnableRaisingEvents=true;

myProcess.Exited += new EventHandler(myProcess_Exited);
}

private void myProcess_Exited(object sender, System.EventArgs e)
{

MessageBox.Show(string.Format("Note execution time: {0}",myProcess.ExitTime.Subtract(myProcess.StartTime)) ;

}

استفاده از تایمر بی معنی است.