PDA

View Full Version : وقتی رویداد یک button در حال اجرا هستش و button غیرفعال می شه من می خوام غیرفعال نشه ...



saeedhushmand
سه شنبه 26 دی 1391, 09:02 صبح
دوستان وقتی رویداد یک button در حال اجرا هستش و button غیرفعال می شه من می خوام غیرفعال نشه و کار کنه یعنی وقتی رویداد در حال اجرا هست بشه دوباره روی button کلیک کرد و اون رویداد دوباره اجرا بشه

hamid_hr
سه شنبه 26 دی 1391, 09:23 صبح
با اجازه اساتيد

فك كنم بايد كد رويدادو داخل thread بنويسي و هر وقت كليك كرد اون thread رو اجراش كني

hamedAdmin
سه شنبه 26 دی 1391, 09:38 صبح
تا اونجایی که منم اطلاع دارم همین تنها راهشه


با اجازه اساتيد

فك كنم بايد كد رويدادو داخل thread بنويسي و هر وقت كليك كرد اون thread رو اجراش كني

RED-C0DE
سه شنبه 26 دی 1391, 10:30 صبح
چ کاری رو می خواین انجام بدین؟
بصورت آسنکرون می تونین انجامش بدین (در واقع همون thread دیگر)
از backgroundWorker هم می تونین استفاده کنین اینجور وقتا کارا رو راحت می کنه

saeedhushmand
سه شنبه 26 دی 1391, 14:18 عصر
من از thread استفاده کردم button فعال نگه می داره ولی وقتی مجدد روش کلیک می کنی تا پایان عملیات thread برنامه هنگ می کنه من در واقع می خوام با کلیک مجدد روی همون button ادامه عملیات رو متوقف کنم...

کدیهم که در button استفاده کردم ابنه...


if (i == 0)
{
i = 1;
Stop =
false;

btnControl.Text =

"قطع عملیات";

th1 =

new System.Threading.Thread(new System.Threading.ThreadStart(Control));

th1.Start();

}

elseif (i == 1)

{

i = 0;

btnControl.Text =
"کنترل اسناد";

Stop =
true;

th1 =
null;

}



لطفا کمک کنید....

مهرداد صفا
سه شنبه 26 دی 1391, 16:38 عصر
با سلام
از متود Application.DoEvents درون متود و حلقه ها استفاده کنید، احتمالا مشکل حل شود.

RED-C0DE
سه شنبه 26 دی 1391, 19:54 عصر
همونطور ک گفتم از BackgroundWorker استفاده کنید.

زمانی که چند کار همزمان می خواین انجام بدین و همزمان با کنترلهای روی فرمتون هم سرو کار دارین (یعنی با ترد مربوط ب UI می خواین همزمان کار کنید)، راحت تره ک از BackgroundWorker‌ استفاده کنید ک درگیر Invoke های جور واجور (چون مثلا اگه کنترلی روی یک ترد (معمولا ترد اصلی ک مربوط ب UI هست) ایجاد شده باشه و بخواین از ترد دیگه بهش دسترسی داشته باشید در حالت عادی CrossThreadingException می خورین و باید invoke انجام بدید تا ب ترد مالک اون کنترل برسین) و exception های مربوط ب thread ها از جمله CrossThreading نشین ، بهتره از BackgroundWorker استفاده کنید