C# ile seri prottan data gelince Timer Dursun.

Başlatan since1990, 05 Haziran 2012, 12:51:52

since1990

C# ta Timer ile işlemcilere data yollayıp cevap alıyoum. Eğer yolladığım datanın karşılğı yoksa beklemesin istiyorum yani. Bana cevap gelecekse beklemek istiyorum. Fakat data receieved eventin içerisinden timera müdahle edince timer duruyor?? Tekrar çalıştıramıyorum bi fikri olan varmı?

Gelen data kesmesi
private void seriport_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            timer2.Stop(); //Burda data geldiği için timer dursun istiyorum.
            
            bool ayrildi=false;
            decimal gelen_adres;
            decimal gelen_data;
            string[] data = new string[4];


            

            System.Threading.Thread.Sleep(100);

            gelen = seriport.ReadExisting();

            textBox1.Text = gelen;

            try
            {
                
                data[3] = null;
                data = gelen.Split("?".ToCharArray());
             ayrildi = true; 
            }
            catch (Exception)
            { ayrildi = false; }

            if ((ayrildi == true))
            { gelen_adres = Convert.ToDecimal(data[1]);
            gelen_data = Convert.ToDecimal(data[2]);

            gelen_adres = gelen_adres / 10;

            Modul1.smodul[Convert.ToInt16(gelen_adres)] = gelen;
            
            }



            timer2.Start(); // data işleme işlemi bittiği için data göndermeye devam etmesi için timer 2 yi açıyorum tekrar.
            
        
        
        
        }


Timer 2 kesmesi

private void timer2_Tick(object sender, EventArgs e)
        {
            
                    seriport.DiscardOutBuffer();
                    adresler[0] = data_adres;
                    
                    seriport.Write(adresler, 0, 1);
                    

                    data_adres++;

                    if (data_adres > 12)
                    { data_adres = 1; }
                
            }

"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

YARARMAN

Sorununu tam manasıyla anlayamadım.
Datanın karşılığı gelince zaten timer duruyor.
Sen tekrar başlatmak istiyorsan, veri gelip de işlerini bitirdikten sonra timerı tekrardan başlatacaksın.

since1990

işte datareceieved eventin içerisinde timeri durdurp çıkşında çalıştırıyorum. Ama gerçekte brikez datareceieved eventin içerisine giriyor. Sonra  timer2.Start() etsemde çalışmıyor.?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

YARARMAN


since1990

onuda denedim olmadı. Timer in içerisine bir şart koydum ifle ture veya false olarak bakıyorum yani timer yine tickliyor ama içerisindeki işlemi yaptırmıyorum. sorunumu böyle çözdüm :)
timer stop yerine hazir diye bir bool tanımladım. girerken false çıkarken true yapıyorum. timer içerisine de if (hazir==true) yazdım tüm timer ifadesine. ;)
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

YARARMAN

Enable özelliğini true ya da false yaparak neden kullanmıyorsun?
Çeltefilli yollara gidiyorsun?

since1990

HOcam denedim olmadı. enable ile start stopun farkı varmı?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

YARARMAN

Aşağıdaki bağlantıdaki yazılanları iyi oku.

http://msdn.microsoft.com/en-us/library/xh4x8z27

timer içinde bool denetlemene gerek kalmaz.
Elbette o da ayrı bir seçenek.