none
Profesyonel Progressbar kullanımı ???

    Soru

  • Arkadaşlar. Benim bir projem var. Bu projede örneğin veritabanından veri listeleyeceğim, sonra bunları çekeceğim, sağa sola yazdıracapğım felan derken bu işlemlerin ne derecede ilerlediğini kullanıcıya göstermek için progressbar kullanacağım. Benim yapmak istediğim bilgisyarın öncelikle yapılacak olan bu işlemlerin ne kadar süreceğini hesaplamak, sonra düzgün bir biçimde (eşit süre aralıklarla, yani örneğin sunucuya bağlantıya %30 verip 1 saniyede % 30'u oluyor, bazen 10 saniyede bağlanıp progressbar'ın %30 u doluyor. Böyle eşit olmayan aralıklarla değil). Yapmak istediğim bu işlemlerin ne kadar süreceğini önceden hesaplayıp mesela 10 saniyede gerçekleşecekse 1 saniyede %10'unu doldurtmam gerekiyor. Yani InstallShield deki gibi önce yüklenecek dosyanın boyutunu belirleyip, sonra bilgisayarın yazım hızını öğrenip, kaç saniyede biteceğini hesaplayıp ona göre doldurmak istiyorum progress bar'ı bunu nasıl yapabilirim ???
    05 Haziran 2012 Salı 22:05

Yanıtlar

  • merhaba

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Timer_Process
    {
    	public partial class TestProgram : Form
    	{
    		private Int maxTime = 30;
    		private Int elapsedTime;
    
    		public TestProgram()
    		{
    			InitializeComponent();
    		}
    
    		private void startButton_Click(object sender, EventArgs e)
    		{	// processbar	 
    			ProgressBar.Value = 0;
    			elapsedTime = 0;
    			// işleme başla
    			counntdownTimer.Start();
    		}
    
    		private void counntdownTimer_Tick(object sender, EventArgs e)
    		{
    			// süre maksimum süreden az is
    			if (elapsedTime < maxTime)
    			{
    				// süreyi arttır
    				elapsedTime++;
    				// processbar ilerlemesi
    				elapsedTimeProgressBar.Value = (100 / maxTime) * elapsedTime;
    			}
    		}
    
    		private void stopButton_Click(object sender, EventArgs e)
    		{
    			// süreyi durdur
    			counntdownTimer.Stop();
    			// sonuçlar
    			MessageBox.Show(String.Format("process bar işlemi {0} saniye sürdü of {1} (4 * {2})",elapsedTime, (maxTime - elapsedTime) * 4,maxTime - elapsedTime ));
    		}
    	}
    }
    

    13 Haziran 2012 Çarşamba 18:57

Tüm Yanıtlar

  • vazgeç bu sevdadan, bunu yapabilecek olsalar Microsoft kendi yazılımlarındaki "Tahmini Dosya Kopyalama - Silme İşlemleri" için yapardı =)

    Şakayı bir yana bırakırsak oldukça zahmetli bir iş olurdu bu çünkü Bunları hesaplayabilmek için sadece kendi programındaki Thread'leri değil yükleme yapılacak olan bilgisayardaki Aktif Thread'leri ve Önceliklerini de göz önünde bulundurup hesap kitap yapıp buna göre bir çözüm üretmen gerekir.

    Bunun dışında bende custom progressbar arıyorum WPF - Silverlight ile bir çözümün var ise mail adresim exe.cute@live.com =)


    JESUS PROMISED THE END OF ALL WICKED PEOPLE,ODIN PROMISED THE END OF ALL ICE GIANTS. I DON'T SEE MANY ICE GIANTS AROUND... exe[nokta]cute[at]live[nokta]com

    07 Haziran 2012 Perşembe 17:35
  • merhaba

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Timer_Process
    {
    	public partial class TestProgram : Form
    	{
    		private Int maxTime = 30;
    		private Int elapsedTime;
    
    		public TestProgram()
    		{
    			InitializeComponent();
    		}
    
    		private void startButton_Click(object sender, EventArgs e)
    		{	// processbar	 
    			ProgressBar.Value = 0;
    			elapsedTime = 0;
    			// işleme başla
    			counntdownTimer.Start();
    		}
    
    		private void counntdownTimer_Tick(object sender, EventArgs e)
    		{
    			// süre maksimum süreden az is
    			if (elapsedTime < maxTime)
    			{
    				// süreyi arttır
    				elapsedTime++;
    				// processbar ilerlemesi
    				elapsedTimeProgressBar.Value = (100 / maxTime) * elapsedTime;
    			}
    		}
    
    		private void stopButton_Click(object sender, EventArgs e)
    		{
    			// süreyi durdur
    			counntdownTimer.Stop();
    			// sonuçlar
    			MessageBox.Show(String.Format("process bar işlemi {0} saniye sürdü of {1} (4 * {2})",elapsedTime, (maxTime - elapsedTime) * 4,maxTime - elapsedTime ));
    		}
    	}
    }
    

    13 Haziran 2012 Çarşamba 18:57