C# Programda İşlem Yaparken Kilitlenme

C# Programda program işlem yaparken kilitlenme sorununu nasıl çözeriz ? C#’a yeni başlayan arkadaşlar bu sorunun çözümünü bilmezler. Nasıl bir sorun olduğunu nasıl arama yapacaklarını da bilemezler.

Bunun için yapmanız gereken çok basit. C# da backgroundworker diye bir sınıfımız var bu bizim için bu işlemi yapıyor.

Şimdi BackgroundWorker kontrolünün özelliklerini inceleyelim:

  • WorkerReportsProgress, özelliği “true” yapılırsa, BackgroundWorker çalışırken yapılan işlemlerle ilgili, dışarıya anlık, güncel bilgi gönderir. Bu bilgi  BackgroundWorker ‘ın ProgressChanged event ‘inde yakalanır. Default değeri “false” ‘tur.
  • WorkerSupportsCancellation, true ise kullanıcı, BackgroundWorker kontrolünün arka planda yaptığı işi sonladırabilir. Default değeri “false” ‘tur. Örneğin programcı olarak ben, arka planda yapılan iş bitmeden, işlemin sonlandırılmasını istemeyebilirim. Bu özelliğin bu opsiyonu sunmasının nedeni de budur.

Bir de bu kontrolümüzün event ‘lerine bir göz atalım. 3 tane event ‘e sahiptir. Bunlar:

  • DoWork, event ‘inde BackgroundWorker ‘ın yapılacağı işlemler tanımlanır. BackgroundWorker çalıştırıldığında bu metot çalışmaya başlar. Peki BackgroundWorker ne zaman çalışır? BackgroundWorker ‘ın “RunWorkAsync()” adında bir metodu vardır.  “RunWorkAsync” metodu bir defa çağırıldığında “DoWork” event ‘i de tetiklenmiş olur ve iki iş birbirinden bağımsız olarak çalışmaya başlar. “RunWorkAsync” ‘ın, “run work asynchron” kısaltmasıdır. Kelime anlamı da “bağımsız olarak çalış” demektir.
  • ProgressChanged, BackgroundWorker ‘ın WorkerReportsProgress özelliği true ise, BackgroundWorker ‘ın yaptığı her işlem değişikliğinde bu event tetiklenir. Bu event ‘te genellikle bir “ProgressBar” kontrolü üzerinde, BackgroundWorker ‘ın işlemlerinin durumu izlenir.
  • RunWorkerComplated,  BackgroundWorker ‘ın işlemi bittiğinde bu event tetiklenir. Eğer programda ayrı thread ‘deki yapılan işin bittiğinden haberdar olmak isteniyorsa bu event kullanılır. Böylece kullanıcı dostu bir uygulama geliştirmeye olanak sağlar. Bu event, bir kere çalışır.

Örnek olarak açıklayacak olursak::


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
 public partial class Form1 : Form
 {
 public int sayi = 0;
BackgroundWorker backgroundWorker1 = new BackgroundWorker();
 public Form1()
 {
 CheckForIllegalCrossThreadCalls = false;
 InitializeComponent();
 }

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
 {
 deneme();
 }
 public void deneme()
 {
 while (true)
 {
 sayi++;

 }
 MessageBox.Show(sayi.ToString());
 }
 private void button1_Click(object sender, EventArgs e)
 {
 backgroundWorker1.RunWorkerAsync();
 //deneme();
 }
 }
}

** Burada button click eventindeki denemeyi yorum satırından çıkarırsanız eski kilitlenen halini de görürsünüz.

Bu kadar…

Düşüncesiz Adam

sizleri düşünmeyip buraya hiçbir şey yazmadım !

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.