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 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.
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;
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.
Teşekkür ederim Mesut hocam istediğim sonuca ulaştım. :)