Seri Porta Sürekli Veri Gönderme

Başlatan flowchartx, 13 Ekim 2021, 20:52:47

flowchartx

   private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {           
         if (checkBox1.Checked == true)
            {
                while (checkBox1.Checked == true)
                {
                    string[] dizi = { "1", "2", "3", "4", "5", "6" };
               
                    for (int i = 0; i < 3; i++)
                    {
                        serialPort1.Write(dizi[2 * i]);
                        serialPort1.Write(dizi[2 * i + 1]);
                        System.Threading.Thread.Sleep(300);
                        serialPort1.Write("0");
                    }
                    if (checkBox1.Checked == false)
                        break;

                }
            }
        }

Merhabalar
   C# ile yeni çalışmaya başladım. Yukardaki kodda  chexboxı enable yapınca sürekli seri porta veri göndermek istiyorum ve disable yapınca döngüden çıkmasını istiyorum. Fakat programı çalıştırdığımda chexboxu enable yaptığım anda arayüz kilitleniyor arayüzde hiç bir işlemm yapamıyorum, while döngüsü içinden çıkamıyorum nasıl bir yol izlemeliyim yardımcı olursanız çok sevinirim.

tunayk

Event içinde arayüzü kilitlemişsin.  Bu şekilde uygun bir yol değil. İlla böyle olsun dersen While içinde Application.DoEvents() çağır.
Doğru olanı haberleşmeyi ayrı thread içinde yapmanız.

SB7

Alıntı yapılan: tunayk - 13 Ekim 2021, 21:49:01Doğru olanı haberleşmeyi ayrı thread içinde yapmanız.
Merhabalar. Hocam ben de bu konu üzerinde çalışıyorum(C#'a yeni başladım). Seri porttan veri gönderip veri alırken çakışma olmaması için timer ve thread oluşturma yöntemlerini gördüm. Timer yöntemi pek sağlıklı gelmedi açıkçası. Belki bazı projelerde iş görebilir ama esnek bir yazılım mantığı göremedim. Thread mantıklı geldi ancak nasıl uygulayacağımı gösteren bir örnek bulamadım. Seri porttan veri gönderip veri almayla ilgili bir form uygulaması örneği atabilecek var mı?
Ya da nasıl yapabileceğim konusunda fikir verirseniz daha iyi olur.
MCU lardaki gibi kesme mantığıyla veri gelmişşe veriyi bir değişkene atıp ana programda birşey etkilenmesin istiyorum bunu nasıl yapabilirim?
-SB7

tunayk

Yeteri kadar aramamışsın. Çok sayıda örnek var. Hiç değilse VS yardımında bile pekçok örnek var.