aşağıda ufak bir örnek paylaştım konunun daha iyi anlaşılabilmesi için;
formumuza bir adet progressBar, 1 adet buton ve 1 adet listbox yerleştirelim.
////işlemi başlattığımız butonumuz.reportprogress özelliği true olmazsa işlem bilgisi alamayız.
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
backgroundWorker1.WorkerReportsProgress = true;
}
/*işin yapılacağı kısım olan BackgroundWorker nesnemizin DoWork Event'ı.yapılmasını istediğimiz işlemi bu alana yazıyoruz*/
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i++)
{
listBox1.Items.Add("Üretilen Sayı" + " " + e.Result);
backgroundWorker1.ReportProgress(i,e.Result);
System.Threading.Thread.Sleep(new Random().Next(10) * 100);
}
}
///// backgroundworker nesnesi üzerinde herhangi bir değişiklik olduğunda(işlem yapıldığında)
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
////işlem bitiminde yapmak istediğiniz işlemler için kullanabilirsiniz.
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("İşlem Tamamlandı");
}
//// bu attribute false değerini almadığı takdirde aynı thread üzerinden yaratılan nesnelere erişmek istediğinizde cross thread exception alırsınız.
private void Form1_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
}
Hiç yorum yok:
Yorum Gönder