WaitCursor Kullanımı ile Kullanıcı Dostu Arayüz

Uzun süren işlemlerde,kullanıcıyı görev tamamlanana kadar bekletmemiz gerekebilir. İşlem tamamlanana kadar bekleme esnasında kullanıcıya fare imlecini değiştirerek işlemin sürdüğünü göstermek doğru bir seçim olabilir.
Uzun süren işlemler için fare imlecini değiştireceğimiz minik bir örnek yapalım. Yeni bir Windows Application projesi oluşturup projemize MyWaitCursor isimde bir sınıf ekliyor ve sınıfımın IDisposable interface‘inden kalıtım almasını sağlıyorum. Daha sonra formuma bir adet button ekliyor ve button click olayına uzun sürecek işlemimi kodluyorum. Bu işlem 500000000 sayısının faktöriyelini  hesaplamak olacaktır.

MyWaitCursor.cs Sınıfım:

[csharp]

public class MyWaitCursor : IDisposable
{
//Sınıfımı çağırdığımda kurucu metot IsWaitCursor özelliğini aktif hale getirecektir.
public MyWaitCursor()
{
IsWaitCursor = true;
}

public bool IsWaitCursor
{
get
{ return Application.UseWaitCursor; }
set
{
if (Application.UseWaitCursor != value)
{
Application.UseWaitCursor = value;
Cursor.Current = value ? Cursors.WaitCursor : Cursors.Default;
}
}
}
//Sınıf bellekten atılırken çalışacak olan Dispose() metot ise IsWaitCursor özelliğini pasif hale getirecektir.
public void Dispose()
{
IsWaitCursor = false;
}
}

[/csharp]

Form1.cs Sınıfı:

[csharp]

void executeTask()
{
int x = 1;
using (MyWaitCursor wc = new MyWaitCursor())
{
for (int i = 1; i <= 500000000; i++)
{
x = x * i;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
executeTask();
}

[/csharp]

İşlem yapmadan önceki imleç

İşlem yapmadan önceki imleç

İşlem yapılırken imleç

İşlem yapılırken imleç

Not: executeTask() metot içerisinde görmüş olduğunuz using kullanımı IDisposable interface‘sinden türemiş sınıflar için kullanılabilir. İşlem tamamlandığında kullanılan sınıftaki Dispose() metotunu otomatik çağırmaktadır.

 

Mesut Güneş

Selçuk Üniversitesi Bilgisayar programcılığı bölümünden mezun olduktan sonra birçok firmada Yazılım, İş zekası ve Veritabanı Uzmanı olarak çalıştım. Şuan Türkiye’nin en büyük şirketlerinden biri olan Doğan Online’da Veritabanı Yöneticisi olarak çalışıyorum.

You may also like...

3 Responses

  1. Hakan Yusuf dedi ki:

    Merhaba Mesut Hocam öncelikle bizlere sunduğunuz bilgi ve içeriklerden ötürü teşekkürlerimi sunarım.

    ben excelden database veri yüklemesi yapıyorum lakin Cursors.WaitCursor yerine progress bar göstermek istiyorum. Bu konuda bana öneriniz ne olabilir acaba.
    this.Cursor = Cursors.WaitCursor;

    • Mesut Güneş dedi ki:

      Merhaba Hakan,

      Rica ederim. İçeriklerin faydalı olmasına sevindim. Şöyle bir yol izleyebilirsin; İlk önce aktarım yaptığın excel dosyasındaki toplam kayıt sayısını progressbar maximum değeri olarak dinamik atayabilirsin. Döngü içerisinde her satırı içeriye aktardıktan sonra step değerini + 1 olarak arttırabilirsin. Tüm kayıtlar aktarıldığında progressbar doğru bir şekilde dolacak ve tamamlanacaktır.

      • Hakan Yusuf dedi ki:

        Teşekkür ederim Mesut hocam istediğim sonuca ulaştım. :)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.