none
Simge Durumuna Küçültme Sorunu RRS feed

  • Genel Tartışma

  • Herkese kolay gelsin.

    C# ile geliştirdiğim bir Windows Form uygulamasında seri  port ile 200ms arayla ile veri alışverişi yapıyorum. Veri alışverişi sırasında uygulamayı simge durumuna küçülttükten sonra, tekrar görev çubuğundan simgeye tıklayınca uygulama ekrana gelmiyor. Bu hata ile karşılaşan ya da bilgisi olan var mı?

    4 Eylül 2017 Pazartesi 20:34

Tüm Yanıtlar

  •  thread veya backgroundworker kullanırsan çalışma zamanında formunu daha rahat kullanabilirsin.
    4 Eylül 2017 Pazartesi 21:07
  • Thread kullanıyorum o halde hata var, ancak timer'i durdurunca herhangi bir sıkıntı yaşamıyorum
    4 Eylül 2017 Pazartesi 21:15
  • Arkadaşlar problemin Thread.Sleep() komutundan meydana geldiğini farkettim. Bu komut haricinde 100 milisaniye bekletme yapabilmek için nasıl bir yol izlemeliyim?
    26 Eylül 2017 Salı 05:54
  • Thread.Sleep() i UI thread de kullandığınız için oluyordur. Veri iletişiminde kullandığınız thread de yaparsanız bu sorunun olması çok normal değil. UI thread de await Task.Delay(100) kullanılabilir.
    26 Eylül 2017 Salı 06:55
  •         Thread th = new Thread(new ThreadStart(bekle));  // thread oluşturuyorum
            
            private void anaEkran_Load(object sender, EventArgs e)
            {
                th.Start(); // thread başlat
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                
                try
                {
                    if (serialPort1.IsOpen)
                    {
                        oku(); // timer ile her 1000ms'de bir bu fonksiyon çalışacak
                    }
    
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            void oku()
            {
                try
                {   
                    byte[] frame = mesaj(1, 4, 1122, 1); // modbus verisi
                    serialPort1.Write(frame, 0, frame.Length); // veriyi seri porta gönderiyorum
                    bekle(); // burada 200ms bekletme yapmam gerek
                    if (serialPort1.BytesToRead >= 5)
                    {
                        byte[] bufferReceiver = new byte[this.serialPort1.BytesToRead];
                        serialPort1.Read(bufferReceiver, 0, serialPort1.BytesToRead);
                        serialPort1.DiscardInBuffer();
    
    
                        // Process data.
                        byte[] data = new byte[bufferReceiver.Length - 5];
                        Array.Copy(bufferReceiver, 3, data, 0, data.Length);
                        Int16[] analog = Word.ByteToInt16(data);
                        textBox10.Text = (Convert.ToSingle(analog[0])*0.01).ToString("0.00");
    
                    }
    
                    frame = mesaj(1, 4, 1179, 1);
                    serialPort1.Write(frame, 0, frame.Length);
                    bekle();
                    if (serialPort1.BytesToRead >= 5)
                    {
                        byte[] bufferReceiver = new byte[this.serialPort1.BytesToRead];
                        serialPort1.Read(bufferReceiver, 0, serialPort1.BytesToRead);
                        serialPort1.DiscardInBuffer();
    
    
                        // Process data.
                        byte[] data = new byte[bufferReceiver.Length - 5];
                        Array.Copy(bufferReceiver, 3, data, 0, data.Length);
                        Int16[] analog = Word.ByteToInt16(data);
    
                        textBox11.Text = (Convert.ToSingle(analog[0])*0.01).ToString("0.00");
                    }
           }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            static void bekle()  //bekletme fonksiyonu
            {
                Thread.Sleep(200); // 200 ms bekle
            }
    
    

    Nerede yanlış yapıyorum anlamadım :(

    26 Eylül 2017 Salı 13:39