+3 امتیاز
با سلام

نمیدونم سوالم  رو چطور مطرح کنم

من دنبال راهی هستم که برنامه وقتی یک اتفاق افتاد یک کار رو پیوسته انجام بده واز تایمر هم استفاده نکنم مثلا وقتی که روی یک لیبل رویداد موس دون رخ داد موقعیت اون لیبل مساوی با موقعیت موس باشه ولی از تایمر و اینجور چیز ها هم استفاده نکنم میخواهم ببینم ایا راهی هست   

و یک کنترل به اسم background Worker  میخواستم ببینم ایا این کنترل اون کاری که میخواهم انجام میده

با تشکر امیدوارم منظورم رو رسونده باشم

1 پاسخ

+3 امتیاز

بله دوست من شما میتونید از 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();
        }

 

سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,921 کاربر

دسته بندی ها

...