C# butona basınca loopa girecek kod yazmak

InfluxAlp

Hectopat
Katılım
23 Şubat 2021
Mesajlar
846
Çözümler
9
Daha fazla  
Sistem Özellikleri
SanDisk SSD PLUS 240GB/ WDC WD10EARX-00PASB0
NVIDIA GeForce GTX 970
MSI H110M PRO-VD PLUS
INTEL İ3-7100
16 GB RAM
Cinsiyet
Erkek
Meslek
Junior Developer
Arkadaşlar bir program yapmak istiyorum ama uğraşlarıma rağmen yapamadım. Şimdi C#'ta formda 1 tane buton olacak ve bu butona bastığımızda loop döngüsü başlayacak (bu döngünün içinde örneğin ilk taba basacak sonra 1 ve 2 tuşlarına basacak, bu döngü böyle devam edecek). Tuşa tekrar basıldığında ise döngü duracak. Bir türlü yapamadım. Yeniyim. Yardımcı olursanız sevinirim. Benzer şeyler yaptım, mesela tuşa basılıyor fakat geri bastığımda döngü hiçbir türlü durmuyor.

1678137817512.png


Yazdığım kod böyle. Kısmen çalışıyor ama bir türlü istediğim şekilde yapamadım.
 

Dosya Ekleri

  • 1678137750991.png
    1678137750991.png
    72,9 KB · Görüntüleme: 158
Son düzenleyen: Moderatör:
Nasıl bir loop istiyorsunuz? Sonsuz olarak mı? Eğer sonsuz istiyorsanız thread kullanmanız lazım. Ek olarak kodu kod olarak atar mısınız?
 
Nasıl bir loop istiyorsunuz? Sonsuz olarak mı? Eğer sonsuz istiyorsanız thread kullanmanız lazım. Ek olarak kodu kod olarak atar mısınız?
Hocam arkadaş kodda sonsuz döngü kullanıyor, butona basınca yavaşlama olmuyor. Koda timer eklenirse sıkıntı giderilebilir gibi.

Kod:
Arkadaşın kodu


1 başvuru private void buttonOnOff_Click(object sender, EventArgs e) {
// declare a boolean variable to keep track of whether the loop is running bool isRunning = false;
// create an event handler for the button press event
// if the loop is not running, start it {
if (!isRunning)
while (!isRunning)
{
// do something in the loop // ...
SendKeys.Send("1");
// check if the button has been pressed again
Application. DoEvents(); // this allows the button click event to be handled while the loop is running
if (!isRunning)
{
}
isRunning = false;
} // if the loop is already running, stop it else if (isRunning == false) {
isRunning false; =
MessageBox.Show("BİTTİ");
 
Yok, hayır. Timer çözmez bunu. Timer kullanırsa program donar. Thread kullanması lazım. Timer kullanırsa bellek sızıntısı yapar.

@Beroski bu şekilde yapmalı;

C#:
        // döngü durumu
        bool loop_status = true;

        // çalıştırma
        private void button1_Click(object sender, EventArgs e){
            CheckForIllegalCrossThreadCalls = false; // cross-thread hatasını önler
            Thread abc = new Thread(launch);
            abc.Start();
        }

        // ana işlem
        private void launch(){
            while (loop_status){
                for (int i = 0; i <= 9999; i++){
                    listBox1.Items.Add(i.ToString());
                    Thread.Sleep(1000 - DateTime.Now.Millisecond); // sistem zamanına göre 1 saniyeyi milisaniye olarak eşleştirip sleep uygular.
                    if (loop_status == false){
                        break; // for döngüsünü durdurur ve main loop durur.
                    }
                }
            }
        }

        // durdurma
        private void button2_Click(object sender, EventArgs e){
            loop_status = false;
        }
 
Yok, hayır. Timer çözmez bunu. Timer kullanırsa program donar. Thread kullanması lazım. Timer kullanırsa bellek sızıntısı yapar.

@Beroski bu şekilde yapmalı;

C#:
 // döngü durumu.
 bool loop_status = true;

 // çalıştırma.
 private void button1_Click(object sender, EventArgs e){
 CheckForIllegalCrossThreadCalls = false; // cross-thread hatasını önler.
 Thread abc = new Thread(launch);
 abc.Start();
 }

 // ana işlem.
 private void launch(){
 while (loop_status){
 for (int i = 0; i <= 9999; i++){
 listBox1.Items.Add(i.ToString());
 Thread.Sleep(1000 - DateTime.Now.Millisecond); // sistem zamanına göre 1 saniyeyi milisaniye olarak eşleştirip sleep uygular.
 if (loop_status == false){
 break; // for döngüsünü durdurur ve main loop durur.
 }
 }
 }
 }

 // durdurma.
 private void button2_Click(object sender, EventArgs e){
 loop_status = false;
 }

Ben kodu yazdım her şey çalışıyor ama başta dediğim gibi ilk önce taba basıp sonra 1 2'ye basması lazım onları nereye eklemem lazım kodda.
 
Bu tuşları ne için kullanacaksınız? Onu söylemeniz lazım.

Bir tane oyun için yapıyorum otomatik işimi kolaylaştırması açısından böyle bir şey yapıyorum program aktif edince oyundan ilk taba basıp 1'e ardından 2'ye basacak sonra tekrar taba basacak 1 ve 2 bu şekilde devam edecek lakin ben programı durdurana kadar.
 

Technopat Haberler

Geri
Yukarı