none
döngüyü sonlandırma RRS feed

  • Soru

  • merhabalar 

    c# da sonsuz döngüye giren bir döngü örneğin;

    for (int i=0; i<20 ; i++)

    {

    ................................. vsvs vs vs

    if(i ==19)

     {

      i=0

     }

     }

    bu döngü bu şekilde çalışıyor ama 

    döngüyü başka bir butona tıkladığımda durduracak bir komut satırına ihtiyacım var 

    program döngüye girdiğinde diğer işlevleri kabul etmiyor başka bir butona basamıyorum mesele  


    acemi mustafa

    6 Aralık 2019 Cuma 17:00

Yanıtlar

  • Aynı thread içinde bunu yapamazsın.  Böyle bişeye ihtiyacın var ise başka yöntemler kullanmalısın, for while foreach bunlar neredeyse hiç kullanılmayan şeyler.

    Örneğin;

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        private bool durum { get; set; } = false;
        public long kontür { get; set; } = 0;
    
        private async void Say()
        {
            await Task.Run(() =>
            {
                Invoke((Action)(() =>
                {
                    label1.Text = $"Sayıyorum : {++kontür}";
                    if (durum)
                        Say();
                    else
                        label1.Text = $"Durdum : {kontür}";
                    Application.DoEvents();
                }));
            });
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            durum = !durum;
            if (durum)
                Say();
        }
    }


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen acemi mustafa 6 Aralık 2019 Cuma 18:33
    6 Aralık 2019 Cuma 17:33
    Moderatör

Tüm Yanıtlar

  • Aynı thread içinde bunu yapamazsın.  Böyle bişeye ihtiyacın var ise başka yöntemler kullanmalısın, for while foreach bunlar neredeyse hiç kullanılmayan şeyler.

    Örneğin;

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        private bool durum { get; set; } = false;
        public long kontür { get; set; } = 0;
    
        private async void Say()
        {
            await Task.Run(() =>
            {
                Invoke((Action)(() =>
                {
                    label1.Text = $"Sayıyorum : {++kontür}";
                    if (durum)
                        Say();
                    else
                        label1.Text = $"Durdum : {kontür}";
                    Application.DoEvents();
                }));
            });
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            durum = !durum;
            if (durum)
                Say();
        }
    }


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen acemi mustafa 6 Aralık 2019 Cuma 18:33
    6 Aralık 2019 Cuma 17:33
    Moderatör
  • konuyu biraz daha açarsanız çok sevinirim 

    ben tam olarak şöyle bişey yapmak istiyorum 

    A BUTONUNA tıkladıgımda  bir imagelist icerisine rastgele eklenmiş yüzlerce resmi for döngüsü ile sürekli olarak her 50 ms de bir pictureboxta gösteriyorum. (bü işlemi timer ile yapamıyorum çünkü seçilen resimler bana farklı dönüşler saglıyor)

    bu noktada B  butona tıkladıgım anda o anda hangi resimde kaldıysa orda kalsın devam etmesin. istiyorum ama 

    program for döngüsünde döndüğü için farklı bir butono tıkladıgımı okuyamıyor  


    acemi mustafa

    6 Aralık 2019 Cuma 18:26
  • haaaaaaa tamm tamm anladım.

    eyvallah ustadım çok sagolasın :)

     

    acemi mustafa

    6 Aralık 2019 Cuma 18:33