PDA

View Full Version : سوال: رویداد Application.Idle چه زمانی رخ میدهد؟



royall
پنج شنبه 14 فروردین 1393, 18:50 عصر
سلام میخاستم بدونم این رخداد Application.Idle چیه و چه کاری میکنه و روش استفاده از اون چه طوریه؟
با سپاس

مهرداد صفا
جمعه 15 فروردین 1393, 09:54 صبح
سلام.
این رویداد زمانی اتفاق می افتد که برنامه پردازشهای خود را انجام داده و در حالت بی کاری به سر می برد.

Morteza-76
جمعه 15 فروردین 1393, 13:35 عصر
چه جوری باید به این رویداد دسترسی پیدا کنیم و واسش کد بنویسیم؟

Mousavmousab
جمعه 15 فروردین 1393, 14:28 عصر
هر موقع که خواستی بعد از از اینکه کارت تمام شد کاری را انجام بدی این رویداد اتفاق می افته. این یک مثال خیلی خیلی ساده است.
در این مثال وقتی فرم لو میشه دیگه کاری نداریم و Application بیکار باقی میمونه و این رویداد اجرا میشه



private void Form1_Load(object sender, EventArgs e)
{


Application.Idle+= new EventHandler(Application_Idle);
}
private void Application_Idle(object sender, EventArgs e)
{
this.BackColor = Color.GreenYellow;
}

royall
جمعه 15 فروردین 1393, 16:44 عصر
ممنون از پاسخ تون
اون تابغ private void Application_Idle رو خودتون نوشتین ؟
به غیر از فرم در کنترلر های دیگه چه طوری استفاده میشه این Application.Idle
و سول بعد در اینجا
Application.Idle -= new EventHandler(ProcessFrame)

این ProcessFrame چیه
؟ توضیخ این نوشته من نفهمیدم میشه توضیح بدین


The method ProcessFrame() simply switches between what type of capture event is used either QueryFrame(), QueryGrayFrame(), or QuerySmallFrame according to the selected checkbox on the form. The frame can be displayed straight into the picture box regardless of SizeMode as the pplication.Idle thread belongs to this form unlike in the _capture.ImageGrabbed event method

private void ProcessFrame(object sender, EventArgs arg)
{


}

مهرداد صفا
جمعه 15 فروردین 1393, 17:50 عصر
با سلام.

ممنون از پاسخ تون
اون تابغ private void Application_Idle رو خودتون نوشتین ؟

بله. شما می تونید هر متود مشابه دگه ای رو به عنوان هندلر به رویداد اضافه کنید تا با اتفاق افتادن رویداد، متود مورد نظر شما اجرا شود.



به غیر از فرم در کنترلر های دیگه چه طوری استفاده میشه این Application.Idle

این رویداد در سطح برنامه اتفاق می افته و محدود به فرم و یا کنترل و یا Thread خاصی نیست و در همه جا به همین صورت هندل میشه.



و سول بعد در اینجا
Application.Idle -= new EventHandler(ProcessFrame)

این ProcessFrame چیه
؟ توضیخ این نوشته من نفهمیدم میشه توضیح بدین


The method ProcessFrame() simply switches between what type of capture event is used either QueryFrame(), QueryGrayFrame(), or QuerySmallFrame according to the selected checkbox on the form. The frame can be displayed straight into the picture box regardless of SizeMode as the pplication.Idle thread belongs to this form unlike in the _capture.ImageGrabbed event method

private void ProcessFrame(object sender, EventArgs arg)
{


}



متودی بوده که قبلا در زمان Application.Idle اجرا می شده و با این کد دیگه به عنوان هندلر این رویداد استفاده نمیشه.

royall
شنبه 16 فروردین 1393, 11:43 صبح
ممنون از پاسخ تون ولی اینو نگفتین
Application.Idle -= new EventHandler(ProcessFrame)




يك تابع =+ application.idle
يك تابع =- application.idle
مثل Application.Idle -= ProcessFrame
یعنی چی؟

mhsmity
شنبه 16 فروردین 1393, 16:58 عصر
سلام میخاستم بدونم این رخداد Application.Idle چیه و چه کاری میکنه و روش استفاده از اون چه طوریه؟
با سپاس
واقعا ممنون از این سوالتون
بخشید این رویداد رو چه طوری و از کجا پیدا کریدن آخه تو لیست رویدادهای فرم هرچی نگاه کردم پیداش نکردم؟
دیگه چه رویدادهای مثل این رویداد داریم؟

mhsmity
شنبه 16 فروردین 1393, 17:09 عصر
خیلی جالبه این رویداد همیشه در حال اتفاق افتادن هست کد زیر رو امتحان کنید .

private void Form1_Load(object sender, EventArgs e)
{Application.Idle += new EventHandler(Application_Idle);}
private void Application_Idle(object sender, EventArgs e)
{
i++;
label1.Text = i.ToString();
}

میشه کاری کرد که اگر رویداد کلیک فلات باتون رخ داد یه پیغام صادر بشه ؟

Mousavmousab
شنبه 16 فروردین 1393, 18:03 عصر
خیلی جالبه این رویداد همیشه در حال اتفاق افتادن هست کد زیر رو امتحان کنید .

private void Form1_Load(object sender, EventArgs e)
{Application.Idle += new EventHandler(Application_Idle);}
private void Application_Idle(object sender, EventArgs e)
{
i++;
label1.Text = i.ToString();
}

میشه کاری کرد که اگر رویداد کلیک فلات باتون رخ داد یه پیغام صادر بشه ؟



فلان Button اگه اسمش X باشه این طوری میشه:

یه Button روی فرم بنداز اسمشو بزار X



private void Form1_Load(object sender, EventArgs e)
{
x.Click+= new EventHandler(x_Click);
}
private void x_Click(object sender, EventArgs e)
{
MessageBox.Show("felan X button Fired");
}




در ضمن اون رویداد Application.idle توی پنجره Properties نیست که شما ببینی. فقط باید براش با کدنویسی handlesh کنی
موفق باشی

royall
شنبه 16 فروردین 1393, 20:33 عصر
مرسی جواب سوال ما ندادین این =+ برای چیه؟
و این کدی که نوشتین چه کار خاصی میکنه؟

private void Form1_Load(object sender, EventArgs e)
{
x.Click+= new EventHandler(x_Click);
}
private void x_Click(object sender, EventArgs e)
{
MessageBox.Show("felan X button Fired");
}





یعنی وقتی کلید زده شد و کارش تموم شد پیغام میده؟ و چرا تو form-lode این رو نوشتین؟

Mousavmousab
شنبه 16 فروردین 1393, 20:43 عصر
می دونم که میدونی ولی اینجا دقت نکردی

به این چند تا حط کد دقت کن:



int a =10;

a=a+1;

چه فرقی میکنه با
a+=1

هیچ فرقی می کنه؟




حالا من در زمان form_load گفتم که زمانی که روی Object شی X کلیک شد شما این Event را اجرا کن اصطلاحاٌ Fire کن. یا آتیش کن

در حقیقت من یک رویدادی را کنترل کردم یا Handle کردم. ؟ Understand؟
من گفتم x.Click می تونستم بگم DBClick یا هر رویداد دیگه که داره و چرا توی فرم لود گفتم؟

کجا بهتر از Form_load ؟

من می خوام این این عمل را معرفی کنم جایی که فقط یک بار اجرا بشه کافیه. بهترین جا در زمان لود شدن فرم است.
چرا وقتی روی Form دابل کلیک می کنی مستقیماٌ فرم لود باز میشه؟ چون خیلی پر کاربرد است و اکثر اوقات به این نیاز داریم.

به طور کلی من لازم دیدم اینجا بنویسم شما هرجا که لازم دیدی اونجا بنویس
موفق باشی

ebrahim.rayatparvar
پنج شنبه 25 بهمن 1397, 16:32 عصر
سلام دوستان.

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


Application.Idle += new System.EventHandler(this.Idle_Count);


برنامه چه کار کنه چه کار نکنه همینجور میره بالا عدد و ایست نمیکنه. چطور باید کار کنم تا مدت زمان بیکار بودن برنامه رو در بیارم حالا هر تعداد فرم میخواد باشه

barnamenevisjavan
جمعه 26 بهمن 1397, 17:53 عصر
سلام دوستان.

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


Application.Idle += new System.EventHandler(this.Idle_Count);


برنامه چه کار کنه چه کار نکنه همینجور میره بالا عدد و ایست نمیکنه. چطور باید کار کنم تا مدت زمان بیکار بودن برنامه رو در بیارم حالا هر تعداد فرم میخواد باشه
https://code.msdn.microsoft.com/windowsdesktop/Monitorare-il-tempo-di-bba0178c