none
C# - DatagridView dolduruyorum "Form Yanıt vermiyor" DURUMU Hakkında yardımcı olabilir misiniz? RRS feed

  • Soru

  • Merhaba,

    Yapmış olduğum bu uygulamayı daha açıklayıcı olması adına biraz anlatayım. Uygulama bir SerialPort aracılığı ile cihazdan verileri çekmekte. Bu veri çok hızlı şekilde gelerek gride yazılıyor. 

    Burada BindingList kullanarak DataGrid e bağlıyorum.

    binding = new BindingList<sBindDataGrid>();           

    m_dGrid.DataSource = binding;

    daha sonrasında veri akışı sağlandıkça BindingList e ekleme yapıyorum. Otomatik olarak kendi gride bağlı olduğu için grid refresh oluyor. Orada bir sıkıntı yok. Hatta o bloğuda ekleyeyim.

    public bool BindDataGridView(sBindDataGrid bindData)
    {
       try
       {
          binding.Add(bindData);
    
          return true;
       }
       catch (Exception)
       { return false; }
    }

    Son olarak da yaşadığım problemin resmini atayım.

    Teşekkürler.

    8 Ağustos 2016 Pazartesi 12:31

Yanıtlar

  • Çözüme ulaştım, bu sorunla karşılaşanlar için yardımcı olsun. Sadece burası için oluşan bir sorun değil. Genel bir sorun aslında. DataGridi ayrı bir thread de dolduruyorum. Cihazdan dataları da ayrı bir thread den alıyorum. Hiç aklıma gelmemişti. Threadler senkronize çalışmaya bilir. Evet, sistem için senkron ama bazı durumlar yani sizin istediğiniz durum senkton olmaya bilir. Sonrasında aşağıda ki gibi kullanacağım yani yazma işlemini yaptığım grid müsait mi diye bakıyorum.

    Örnek Kod Bloğu : 

    Not : controlsType burada her hangi bir control nesnesi. Benim uygulamamda DataGridView nesnem.

    if (controlsType.InvokeRequired)

    {     

    Action myAction= new Action(() => { //....});     

    controlsType.invoke(myAction);

    }else

    { //...}


    Açıklayıcı bir yanıt olmuştur umarım.

    İyi Çalışmalar.

    • Yanıt Olarak İşaretleyen Kerem Alincak 9 Ağustos 2016 Salı 10:36
    9 Ağustos 2016 Salı 10:36

Tüm Yanıtlar

  • Sonsuz döngüye giriyor gibi görünüyor break point ile kontrol eder misin ?
    8 Ağustos 2016 Pazartesi 12:32
  • Yok sonsuz döngüye girmiyor. Doldurma işlemi tamamlanıyor. Form normal duruyor. Hatta bazı yerlere basabiliyorum. Yalnız gridin vertical scrollbar ına bastığımda yanıt vermiyor diyor.
    8 Ağustos 2016 Pazartesi 12:38
  • ilgili veririn TableAtapter'i foruma ekle bidingSource DataMember ve DataSource ayarlarını yap.

    Grid bingSource bağla,

     bu şekilde Forum load kısmında çağırdığında çalışacaktır.  

    bayi_IslmTableAdapter.FillByEDefterListe(dataSetMain.Bayi_EDefterIslm);

    8 Ağustos 2016 Pazartesi 12:40
  • @A_BLR Veri tabanı kullanmıyorum. Yine de uygun mu?
    8 Ağustos 2016 Pazartesi 12:58
  • scrollbar'a  tıkladığında yeniden verileri dolduruyor olabilir mi?

    8 Ağustos 2016 Pazartesi 13:04
  • Yok imkansız diyemez miyiz? Çünkü hiç bir olay tetikli değil o durumda. 
    8 Ağustos 2016 Pazartesi 13:08
  • adresine alpermix filan bilgisi gönderirisen bakalım.
    • Düzenleyen A_BLR 8 Ağustos 2016 Pazartesi 14:11
    8 Ağustos 2016 Pazartesi 13:15
  • Kerem hocam TeamVier Kullandığı için bende TeamVier Lisans sorunundan dolayı alpemix kullandığım için soruna bakamdık sorun çözülmüş değil.

    kolay gelisin.

    8 Ağustos 2016 Pazartesi 14:10
  • Ahmet Bey ilginiz için tekrar teşekkür ederim. Aynı sorun devam etmekte.
    8 Ağustos 2016 Pazartesi 14:18
  • Çözüme ulaştım, bu sorunla karşılaşanlar için yardımcı olsun. Sadece burası için oluşan bir sorun değil. Genel bir sorun aslında. DataGridi ayrı bir thread de dolduruyorum. Cihazdan dataları da ayrı bir thread den alıyorum. Hiç aklıma gelmemişti. Threadler senkronize çalışmaya bilir. Evet, sistem için senkron ama bazı durumlar yani sizin istediğiniz durum senkton olmaya bilir. Sonrasında aşağıda ki gibi kullanacağım yani yazma işlemini yaptığım grid müsait mi diye bakıyorum.

    Örnek Kod Bloğu : 

    Not : controlsType burada her hangi bir control nesnesi. Benim uygulamamda DataGridView nesnem.

    if (controlsType.InvokeRequired)

    {     

    Action myAction= new Action(() => { //....});     

    controlsType.invoke(myAction);

    }else

    { //...}


    Açıklayıcı bir yanıt olmuştur umarım.

    İyi Çalışmalar.

    • Yanıt Olarak İşaretleyen Kerem Alincak 9 Ağustos 2016 Salı 10:36
    9 Ağustos 2016 Salı 10:36