C# datareceived event'i sorunu

Başlatan Ali_54, 10 Kasım 2011, 12:17:06

yldzelektronik

Selamlar.

C#a yeni başladım. O yüzden hiç bilmediğimi söyleyebilirim.

Seri porttan veri almakla ilgili bir program hazırlıyorum. Veriyi datareceiv event içinde readline() ile alıyorum.Ancak baya uzun bir hata mesajı çıkıyor.Run time  da.

private void SeriPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                Gelen_Veri = SeriPort.ReadLine();
                this.Invoke(new EventHandler(Parse_Veri));
            }
            catch (Exception hata)
            {
                MessageBox.Show("Hata:" + hata.Message);
            }
        }

        private void Parse_Veri(object s, EventArgs e)
        {
            tbTerminalRx.Text += Gelen_Veri;
            string[] Gelen_VeriParse = Gelen_Veri.Split(Ayirac,StringSplitOptions.RemoveEmptyEntries);
            tbTerminalRx.SelectionStart = tbTerminalRx.Text.Length;
            tbTerminalRx.ScrollToCaret();
            Gelen_Veri = string.Empty;
        }


Hata mesajı ise şöyle;

The I/O operation has been aborted because of either a thread exit or an application request.

Readline kullanmadığımda bu hatayı almıyorum ancak gelen veriyi başka bir yerde kullandığım için en düzenli readline ile veriyi alabiliyorum.

Bu sorunun kaynağı ve çözümü nedir?

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

#31
Kimsenin çözüm bulamadığı bir konu mu bu yahu?

Edit: Sorun çözüldü.Mcu tarafında veriyi göderdiğim kısımı \r\n şeklinde düzelttim ve artık c# tarafında readline ile eri alabiliyorum.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

barisertekin

Cross-thread hatası için; x thread'ından form kontrollerine erişim için kullandığım güzel bir yöntemi paylaşıyorum.

static void SynchronizedInvoke(ISynchronizeInvoke sync, Action action)
{
            if (!sync.InvokeRequired)
            {
                action();
                return;
            }
            sync.Invoke(action, new object[] { });
}


x thread'ı içerisindeki kullanımı ise;

SynchronizedInvoke(txtMessage, () => txtMessage.Text = "QWERTY");