PDA

View Full Version : سوال: نحوه ی Pause و Resume کردن یک Tread



abtin148
یک شنبه 12 آذر 1391, 06:24 صبح
من یک Tread دارم که میخوام هنگام اجرا اونو pause و resume کنم

مهرداد صفا
یک شنبه 12 آذر 1391, 08:41 صبح
با سلام
با استفاده از متود Thread.Suspend میتوانید Thread را متوقف و با متود Thread.Resume آن را مجددا فعال کنید.
قبل از تغییر وضعیت Thread مواظب Thread.ThreadState باشید تا به exception بر نخورید. مثلا اگر Thread را قبل از Start بخواهید Suspend کنید با خطا روبرو می شوید.

شاه وفا ابالفضل

samadblaj
یک شنبه 12 آذر 1391, 09:58 صبح
سلام دوستان ببخشید سوالم رو اینجا مطرح میکنم... من یه برنامه دارم که یک سری از اطلاعات رو از یک دیتابیس حجیم دریافت و در listbox نمایش دهم ...
حالا می خوام یه خصوصیات stop براش بذارم بهترین روش چیه ؟

abtin148
یک شنبه 12 آذر 1391, 13:39 عصر
با سلام
با استفاده از متود Thread.Suspend میتوانید Thread را متوقف و با متود Thread.Resume آن را مجددا فعال کنید.
قبل از تغییر وضعیت Thread مواظب Thread.ThreadState باشید تا به exception بر نخورید. مثلا اگر Thread را قبل از Start بخواهید Suspend کنید با خطا روبرو می شوید.

شاه وفا ابالفضل

مرسی ولی به این صورتی که شما گفتین امکانپذیر نیست

مهرداد صفا
یک شنبه 12 آذر 1391, 16:23 عصر
مرسی ولی به این صورتی که شما گفتین امکانپذیر نیست


سلام
در کد زیر با فشردن یک کلید کار thread متوقف شده و با فشردن مجدد thread دو باره فعال می شود:

//in the name of god
//اللهم صل علی محمد و آله

using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
System.Threading.Thread thread1;
public Form1()
{
InitializeComponent();
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
thread1 = new System.Threading.Thread(test);
thread1.Start();
}

void test()
{
System.Media.SystemSounds.Beep.Play();
while (true)
{
System.Media.SystemSounds.Beep.Play();
System.Threading.Thread.Sleep(1000);
}
}

bool playing;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
playing = !playing;
if (playing)
{
thread1.Suspend();
}
else
{
thread1.Resume();
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
thread1.Abort();
}
}
}

اگر باز هم مشکل حل نشد دقیقتر توضیح دهید.

شاه وفا ابالفضل

Saeed_script
سه شنبه 14 آذر 1391, 14:16 عصر
روش های متوقف کردن موقتی BackGroundWorker
-روش استفاده از حلقه while
http://stackoverflow.com/questions/10124446/how-to-pause-backgroundworker-in-windows-form

-روش استفاده از کلاس manualresetevent
http://stackoverflow.com/questions/6806340/how-to-resume-interrupt-backgroundworker-thread
http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx