PDA

View Full Version : چطوری میتونم background worker متوقف کنم



saeedsos007
چهارشنبه 19 تیر 1392, 10:22 صبح
من یک برنامه نوشتم وقتی که روی دکمه یک کلیک میکنیم label به وسیله background worker شروع به حرکت میکنه حالا میخوام وقتی رو دکمه 2 کلیک کردم background worker متوقف بشه
اینم برنامه

CsharpNevisi
چهارشنبه 19 تیر 1392, 11:56 صبح
من یک برنامه نوشتم وقتی که روی دکمه یک کلیک میکنیم label به وسیله background worker شروع به حرکت میکنه حالا میخوام وقتی رو دکمه 2 کلیک کردم background worker متوقف بشه
اینم برنامه

دستورات باید اینطوری نوشته بشن :
using System;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
BackgroundWorker bgw = new BackgroundWorker();
private void button1_Click(object sender, EventArgs e)
{
bgw.DoWork += dowork_bgw;
bgw.RunWorkerAsync();
}
public void dowork_bgw(object sender, DoWorkEventArgs e)
{

label1.Invoke(new Action(()=>
{

int x = label1.Left,y = label1.Top,i=1,j=1;
while (1 == 1)
{
if ((label1.Left.Equals(this.Width - 30)) || label1.Left.Equals(30))
i *= -1;
if ((label1.Top.Equals(this.Height - 30)) || label1.Top.Equals(30))
j *= -1;
label1.Left += i;
label1.Top += j;
if (bgw.CancellationPending)//این شرط برای توقف لازم است
{
e.Cancel = true;
break;
}
Thread.Sleep(100);
Application.DoEvents();
}



}));
}

private void button2_Click(object sender, EventArgs e)
{
bgw.DoWork += dowork_bgw;
bgw.WorkerSupportsCancellation = true;
bgw.CancelAsync();
}
}
}