PDA

View Full Version : Cancel کردن BackGroundWorker ... ؟



MSN_Issue
شنبه 08 خرداد 1389, 22:53 عصر
سلام به همه ...
دوستان نمیدونم چرا ، ولی هر کار میکنم بکگراند ورکرم کنسل نمیشه ... !!
کدمو ببنید :



private void bgwAutosend_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
else
{
...
}
}
private void bgwAutosend_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (!e.Cancelled)
{
...
}
else
MessageBox.Show("Cancelled");

}

private void btnAutosendStop_Click(object sender, EventArgs e)
{

() bgwAutosend.CancelAsync;


}

لطفا کمک کنید ، خیلی لازمش دارم ...
با تشکر .

Sajjad.Aghapour
شنبه 08 خرداد 1389, 23:58 عصر
کدت رو درست بررسی کن.چک کردن CancellationPending باید چه زمانی چک بشه؟
مثال زیر رو ببین:


private void bg_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 10; i++)
{
if (bg.CancellationPending)
{
e.Cancel = true;
}
else
{
bg.ReportProgress(i);
}
}

}

این شرط رو من زمانی چک میکنم که میخوام Report داشته باشم(دقیقا جایی که تیکه کد اصلی من قراره اجرا بشه)

اول چک کن، اگه Cancel نشده بود بعد عملیات رو انجام بده...

MSN_Issue
یک شنبه 09 خرداد 1389, 10:01 صبح
توی تابع RunWorkerCompleted درست کار کردم ؟!!!
آخه اون پیغامی که گفتم ، در موقع کنسل شدن نشون بده ، هیچوقت نشون نمیده !!!