C# tam ekran yapınca while yavaşlıyor

Yok sadece SERİALPORT'dan veri alıp LABEL'e yazdırma var.

C#:
if (serialPort1.IsOpen)
 {
 bağlantı_durumu.Text = "Bağlı";
 kronometre_durumu.Text = "Hazır";
 while (true)
 {
 try.
 {
 string okunan_değer = serialPort1.ReadLine();
 int sure = Convert.ToInt32(okunan_değer);
 int salise = (sure / 10) % 100;
 int saniye = (sure / 1000) % 60;
 int dakika = (sure / 1000) / 60;

 kronometre_durumu.Text = "Başlatıldı";

 zaman = dakika.ToString("00") + ":" + saniye.ToString("00") + ":" + salise.ToString("00");

 if (Convert.ToInt32(okunan_değer) == 7)
 {
 kronometre_durumu.Text = "Durduruldu";
 break;
 }
 sayac.Text = zaman;
 }
 catch (Exception)
 {
 MessageBox.Show("Lütfen Bağlantıyı Kontrol Ediniz", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 }
 }

 while (true)
 {
 try.
 {
 string okunan_değer = serialPort1.ReadLine();
 if (Convert.ToInt32(okunan_değer) == 10)
 {
 kronometre_durumu.Text = "Hazır";
 break;
 }
 }
 catch (Exception)
 {
 MessageBox.Show("Lütfen Bağlantıyı Kontrol Ediniz", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 }
 }
 }
Daha doğrusu şöyle deyim.
Form arka planda çalıştığı süre de while yavaşlıyor.
 
Son düzenleme:
Yok sadece SERİALPORT'dan veri alıp LABEL'e yazdırma var.

C#:
if (serialPort1.IsOpen)
 {
 bağlantı_durumu.Text = "Bağlı";
 kronometre_durumu.Text = "Hazır";
 while (true)
 {
 try.
 {
 string okunan_değer = serialPort1.ReadLine();
 int sure = Convert.ToInt32(okunan_değer);
 int salise = (sure / 10) % 100;
 int saniye = (sure / 1000) % 60;
 int dakika = (sure / 1000) / 60;

 kronometre_durumu.Text = "Başlatıldı";

 zaman = dakika.ToString("00") + ":" + saniye.ToString("00") + ":" + salise.ToString("00");

 if (Convert.ToInt32(okunan_değer) == 7)
 {
 kronometre_durumu.Text = "Durduruldu";
 break;
 }
 sayac.Text = zaman;
 }
 catch (Exception)
 {
 MessageBox.Show("Lütfen Bağlantıyı Kontrol Ediniz", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 }
 }

 while (true)
 {
 try.
 {
 string okunan_değer = serialPort1.ReadLine();
 if (Convert.ToInt32(okunan_değer) == 10)
 {
 kronometre_durumu.Text = "Hazır";
 break;
 }
 }
 catch (Exception)
 {
 MessageBox.Show("Lütfen Bağlantıyı Kontrol Ediniz", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 }
 }
 }
Daha doğrusu şöyle deyim.
Form arka planda çalıştığı süre de while yavaşlıyor.
Şöyle deneyin 1 adet daha form ekleyin form1 kodlarını form2 ye geçirin ve form1 den kodları silin daha sonra programı başlattığınızda form1 i kapatın yani form1 kapatma kodu ekleyin
Şöyle deneyin 1 adet daha form ekleyin form1 kodlarını form2'ye geçirin ve form1'den kodları silin daha sonra programı başlattığınızda form1'i kapatın yani form1 kapatma kodu ekleyin.

Program başladığında form1 kapansın yani.
Şöyle deneyin 1 adet daha form ekleyin form1 kodlarını form2'ye geçirin ve form1'den kodları silin daha sonra programı başlattığınızda form1'i kapatın yani form1 kapatma kodu ekleyin.

Program başladığında form1 kapansın yani.

Çünkü bilişim hocamız form1 hep main form olduğu için diğer formlara göre daha ağır çalışır demişti oradan bir mantık yürüttüm umarım olur.
Şöyle deneyin 1 adet daha form ekleyin form1 kodlarını form2'ye geçirin ve form1'den kodları silin daha sonra programı başlattığınızda form1'i kapatın yani form1 kapatma kodu ekleyin.

Program başladığında form1 kapansın yani.

Çünkü bilişim hocamız form1 hep main form olduğu için diğer formlara göre daha ağır çalışır demişti oradan bir mantık yürüttüm umarım olur.

İsterseniz bilişim hocamın YouTube kanalını verebilirim bir videonun altına yorum olarak sorunuzu yazabilirsiniz çok iyi birisi kendisi.
 
İki adet döngü kullanmanın mantığı yok. Kodu tek döngüye indirebilirsin.

Asenkron veri okurken döngüyü ana thread üzerinde çalıştırmayın. İkinci bir thread kullanırsanız sorununuz çözülür muhtemelen.
 
İki adet döngü kullanmanın mantığı yok. Kodu tek döngüye indirebilirsin.

Asenkron veri okurken döngüyü ana thread üzerinde çalıştırmayın. İkinci bir thread kullanırsanız sorununuz çözülür muhtemelen.

Dediğiniz gibi tek döngüye indirdim ve 3 thread kullanıyorum.
Ancak sorunun başka bir şey de olduğunu düşünüyorum yani arka planda çalışma da yavaşlamanın.

Şöyle deneyin 1 adet daha form ekleyin form1 kodlarını form2'ye geçirin ve form1'den kodları silin daha sonra programı başlattığınızda form1'i kapatın yani form1 kapatma kodu ekleyin.

Program başladığında form1 kapansın yani.

Çünkü bilişim hocamız form1 hep main form olduğu için diğer formlara göre daha ağır çalışır demişti oradan bir mantık yürüttüm umarım olur.

İsterseniz bilişim hocamın YouTube kanalını verebilirim bir videonun altına yorum olarak sorunuzu yazabilirsiniz çok iyi birisi kendisi.

Olabilir hocam ancak bildiğim kadarıyla ana formu kapatamıyoruz siz yine de hocanızın kanalını verirseniz sevinirim.
 
Dediğiniz gibi tek döngüye indirdim ve 3 thread kullanıyorum.
Ancak sorunun başka bir şey de olduğunu düşünüyorum yani arka planda çalışma da yavaşlamanın.



Olabilir hocam ancak bildiğim kadarıyla ana formu kapatamıyoruz siz yine de hocanızın kanalını verirseniz sevinirim.
c# videoları aşağıya doğru inerseniz göreceksiniz kanal linki: Atilla Çetin
 
[CODE lang="c" title="arduino"]unsigned long eski=0;
unsigned long yeni=0;
unsigned long sure=0;

void setup() {
Serial.begin(9600);
while(true){
yeni=millis();
break;
}
}

void loop() {
sure=millis()-yeni;
sureGoster(sure);
}

void sureGoster(unsigned long sure){
int salise=(sure/10)%100;
int saniye=(sure / 1000)%60;
unsigned long dakika=(sure / 1000)/60;
Serial.print(dakika);
Serial.print(":");
Serial.print(saniye);
Serial.print(":");
Serial.println(salise);
}[/CODE]
[CODE lang="csharp" title="csharp"]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace arduino_kronometre
{
public partial class Form1 : Form
{
string data;
string[] ports= SerialPort.GetPortNames();
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.Invoke(new EventHandler(bgl_durum));
foreach (string port in ports)
{
comboBox.Items.Add(port);
}
comboBox.SelectedIndex = ports.Length - 1;
serialPort1.DataReceived += SerialPort1_DataReceived;
}

private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
data = serialPort1.ReadLine();
this.Invoke(new EventHandler(displayData_event));
}

private void displayData_event(object sender, EventArgs e)
{
try
{
string[] data_parcala = data.Split(':');
int salise = Convert.ToInt32(data_parcala[2]);
int saniye = Convert.ToInt32(data_parcala[1]);
int dakika = Convert.ToInt32(data_parcala[0]);
lbl_kro.Text = dakika.ToString("00") + ":" + saniye.ToString("00") + ":" + salise.ToString("00");

}
catch (Exception EX)
{
lbl_bgl.Text = EX.Message;
}
}

private void bgl_durum(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
{
lbl_bgl.Text = "Bağlı";
button1.Enabled = false;
button2.Enabled = true;
}
else
{
lbl_bgl.Text = "Bağlı değil";
button1.Enabled = true;
button2.Enabled = false;
}
}

private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = comboBox.Text;
serialPort1.BaudRate = 9600;
serialPort1.Open();
this.Invoke(new EventHandler(bgl_durum));

}

private void button2_Click(object sender, EventArgs e)
{
serialPort1.Close();
this.Invoke(new EventHandler(bgl_durum));

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
button2_Click(sender, e);
}


}
}
[/CODE]

Hocam basit bir kronometre yaptım arduino'da. C# alırken while kullanmadığım halde c#'a değerler yavaş geliyor. Bu da tahminim serialport'tan kaynaklanıyor. Arduino'nun kendi serial portunda değerler normal geliyor.
 
Hocam uğraştığınız için teşekkür ederim. Sorun bazen 1 saniye gibi bir gözle görülür değer alıyor sonrasında arayı kapatıyor ve 2 side normal hızda devam ediyor. Sorun genel anlamıyla çözdüm gibi şimdi uygulama arka planda çalışırken yavaşlık oluyor bunu çözemedim.
 

Yeni konular

Geri
Yukarı