PDA

View Full Version : متوقف کردن برنامه در حال اجرا



sevenboys
دوشنبه 30 اردیبهشت 1392, 15:02 عصر
من یک حلقه دارم که مثلا 1000 بار اجرا میشود و در هر بار اجرا یکسری اطلاعات برمیگرداند که در دیتا گرید ویو نمایش میدهد حال میخواهم یک دگمه برای stop حلقه بزارم که اگر کاربر روی ان کلیک کرد تا هر چند بار که حلقه اجرا شده بود متوقف شود، چه کد های باید بنویسم؟

mousa1992
دوشنبه 30 اردیبهشت 1392, 15:18 عصر
دوتا راه :
1 - استفاده از ترد ها و انجام پروسس بصورت ناهمگام ( توصیه شده ) - با زدن باتن ترد رو متوقف میکنی - کامپوننت backgroundworker کار رو خیلی راحت میکنه
2 - راه راحت تر : تعریف ی متغیر از نوع bool و توی اجرای حلقه هربار چک کنی اگه مثلا مقدار این متغیر true بود ادامه بده در غیر این صورت break ینی از حلقه بزن بیرون


موفق باشی

csharpdoost
دوشنبه 30 اردیبهشت 1392, 15:23 عصر
یه راهش اینکه زیر دگمه bool check=true; بنویسی. و داخل حلقه هم یه if بنویسی که هر بار این بولین رو چک کنه هر موقع true شد Breake بشه.

csharpdoost
دوشنبه 30 اردیبهشت 1392, 15:24 عصر
آقا موسی همیشه یه دقیقه از من جلوتره.:قهقهه:

sevenboys
سه شنبه 31 اردیبهشت 1392, 11:43 صبح
دوست عزیز من یک متغیر از نوع bool به صورت سراسری تعریف کردم و در رویداد کلیک دگمه هم ان را برابر false کردم اما وقتی حلقه قرار است که مثلا 1000 بار اجرا بشه وقتی هم در اجرای 500 روی دگمه کلیک کنی سراغ رویداد کلیک نمیرود و باید کل 1000 بار حلقه اجرا شود و بعد از ان سراغ رویداد میرود این مشکل را چطوری حل کنم؟

دوتا راه :
1 - استفاده از ترد ها و انجام پروسس بصورت ناهمگام ( توصیه شده ) - با زدن باتن ترد رو متوقف میکنی - کامپوننت backgroundworker کار رو خیلی راحت میکنه
2 - راه راحت تر : تعریف ی متغیر از نوع bool و توی اجرای حلقه هربار چک کنی اگه مثلا مقدار این متغیر true بود ادامه بده در غیر این صورت break ینی از حلقه بزن بیرون


موفق باشی

csharpdoost
سه شنبه 31 اردیبهشت 1392, 12:17 عصر
دوست عزیز من یک متغیر از نوع bool به صورت سراسری تعریف کردم و در رویداد کلیک دگمه هم ان را برابر false کردم اما وقتی حلقه قرار است که مثلا 1000 بار اجرا بشه وقتی هم در اجرای 500 روی دگمه کلیک کنی سراغ رویداد کلیک نمیرود و باید کل 1000 بار حلقه اجرا شود و بعد از ان سراغ رویداد میرود این مشکل را چطوری حل کنم؟
این متغیر سراسری (مثلا
bool check=false;)رو اول برابر false تعریف کن . زیر دگمه برابر true کن.(یعنی وقتی دکمه فشرده شد متغیر برابر true بشه). بعدی داخل حلقه بنویس :
if( check==true) Break; تمام.

sevenboys
سه شنبه 31 اردیبهشت 1392, 14:00 عصر
دوست عزیز همین کار را کردم اما حلقه ای که در حال اجرا هست را تا اخر اجرا میکنه بعد میره سراغ رویداد کلیکی که رخ داده

این متغیر سراسری (مثلا
bool check=false;)رو اول برابر false تعریف کن . زیر دگمه برابر true کن.(یعنی وقتی دکمه فشرده شد متغیر برابر true بشه). بعدی داخل حلقه بنویس :
if( check==true) Break; تمام.

Mahmoud.Afrad
سه شنبه 31 اردیبهشت 1392, 16:00 عصر
همونطور که گفته شد باید با thread و یا backgroundworker کار کنید. مثال و کد هم سرچ کنید هست.

mousa1992
سه شنبه 31 اردیبهشت 1392, 17:06 عصر
bool br = false;
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100000; i++)
{
if (!br)
{
this.Text = i.ToString();
Application.DoEvents();
}
else
break;
}

}

private void button2_Click(object sender, EventArgs e)
{
br = true;
}

sevenboys
چهارشنبه 01 خرداد 1392, 11:35 صبح
من نتونستم کد برای اینکه از حلقه بتونم بیام بیرون پیدا کنم میشه لینک ان را بگذارید

همونطور که گفته شد باید با thread و یا backgroundworker کار کنید. مثال و کد هم سرچ کنید هست.