بله دوست من شما میتونید از Thread یا backgrowndworker استفاده کنید . برای استفاده از backgrowndworker بهتره به نکات زیر توجه کنی .
دستوراتی که میخای مدام چک بشه باید در قسمت backgroundWorker1_DoWork بنویسی فقط نکته اینجاست که از ابزارها نمیتونی به طور معمول در این قسمت استفاده کنی . مثلا اگر بخواهی تکست یک لیبیل به نام label1 رو تغییر بدی باید یک دلگیت به صورت زیر بنویسی .
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Label lbl = new Label();
lbl.Text = "متن دلخواه";
// ساخت دلگیت
if (label1.InvokeRequired)
{
label1.Invoke(new MethodInvoker(delegate { label1.Text=lbl.Text; }));
}
//....
}
برای بقیه ابزار هم به همین شکل
هر بار که بخای این دستورات اجرا بشه باید بک ورکر رو ران کنی به صورت زیر :
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
البته اگه میخای این کار مدام انجام بشه بهتره یک بار بک ورکر رو ران کنی و دستوراتت رو که داخل Doworck نوشتی داخل یک حلقه تکرار بی نهایت مثل Where ( True ) قرار بدی
و در اخر این که از دستور زیر هم میتونی برای کنسل کردن استفاده کنی
private void button2_Click(object sender, EventArgs e)
{
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.CancelAsync();
}