PDA

View Full Version : سوال: Sleep ترد با دکمه



aapalireza
یک شنبه 30 آبان 1389, 16:05 عصر
سلام!
چه گونه می‌توانم در یک پروژه‌ی multithread, در رویداد کلیک یک button خوابیدن و غیر فعال شدن یکی از threadها و در رویداد buton دیگر فعال شدن ترد را بنویسم؟

mahdi87_gh
یک شنبه 30 آبان 1389, 18:15 عصر
به صورت زیر thread رو یه متغیر گلوبال تعریف کنید

Thread th1;

با کد زیر ترد رو مقدار دهی کنید. تابع thread1 تابع شروع این ترد معرفی شده است

th1 = new Thread(new ThreadStart(thread1));
با کد های زیر با ترد کار کنید.هملکرد هر کدام از نام تابع آن مشخص است

th1.Start();
th1.Abort();
th1.Suspend();
th1.Resume();موفق باشید

aapalireza
یک شنبه 30 آبان 1389, 18:25 عصر
به صورت زیر thread رو یه متغیر گلوبال تعریف کنید

Thread th1;با کد زیر ترد رو مقدار دهی کنید. تابع thread1 تابع شروع این ترد معرفی شده است

th1 = new Thread(new ThreadStart(thread1));
با کد های زیر با ترد کار کنید.هملکرد هر کدام از نام تابع آن مشخص است

th1.Start();
th1.Abort();
th1.Suspend();
th1.Resume();موفق باشید

ممنون
من در رویداد کلیک button نوشتم: th1.Resume
حلقه‌ی من که در ترد است متوقف می‌شود اما خطا می‌دهد و می‌نویسد:

Thread is not user-suspended; it cannot be resumed.

چه کنم؟

در ضمن با Resume کردن آن را نگه می‌دارم,
چگونه آن را ادامه دهم؟
یعنی از ادامه‌ی عملیات قبلی شروع کند...

mahdi87_gh
یک شنبه 30 آبان 1389, 18:40 عصر
لطفا به لینک زیر با دقت نگاه کنید.
http://msdn.microsoft.com/en-us/library/tttdef8x%28VS.80%29.aspx
اگه مشکلتون رو خودتون حل نکردین، لصفا کدتون رو بزارین تا ببینیم مشکل از چیه؟
موفق باشید

aapalireza
یک شنبه 30 آبان 1389, 22:41 عصر
لطفا به لینک زیر با دقت نگاه کنید.
http://msdn.microsoft.com/en-us/library/tttdef8x%28VS.80%29.aspx
اگه مشکلتون رو خودتون حل نکردین، لصفا کدتون رو بزارین تا ببینیم مشکل از چیه؟
موفق باشید




using System.Threading;

namespace stop
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Thread t;
delegate void myDelegate();
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(this.Count));
t.Start();

}

void Count()
{
for (int i = 0; i <= 1000; i++)
{
if (textBox1.InvokeRequired)
{
myDelegate d = new myDelegate(this.Count);
Invoke(d);
}
else
{
textBox1.Text = i.ToString();
Application.DoEvents();
Thread.Sleep(10);
}
}
t.Abort();
}

private void btnStop_Click(object sender, EventArgs e)
{
t.Resume();
}

}
}


این کد با فرض این است که یک تکست باکس, و دو bytton بر روی صفحه وجود دارد...
اگر با تکمیل کد من یک نمونه کد بدهید که با کلیک بر رویstart شروع شود, با کلیک بر روی stop حلقه متوقف شود و با Play حلقه ادامه دهد...(از اول شروع نکند! ادامه دهد!)
خیلی متشکر می‌شوم, فکر می‌کنم تمام حالت های مورد نیاز را پوشش بدهد!