Re: Пропадают события
От: meerius Канада  
Дата: 30.11.07 15:41
Оценка:
Здравствуйте, ZeeM, Вы писали:

ZM>Есть класс который обрабатывает события от com-порта. Полученная информация передается с помощью событий в главную форму для дальнейшей обработки и еще в одну форму где отображается log информация о работе с портом.


ZM>В log форме вывожу полученную информацию потоко-безопасно для WinForm(вывожу в ListView):



ZM>
ZM>        ....
        
ZM>        public void Invoke(MethodInvoker methodToInvoke)
ZM>        {
ZM>            if (InvokeRequired)
ZM>            {
ZM>                base.Invoke(methodToInvoke);
ZM>            }
ZM>            else
ZM>            {
ZM>                methodToInvoke();
ZM>            }
ZM>        }

ZM>        private void SetListView_Log(string sItem1,
ZM>                                        string sItem2,
ZM>                                        string sItem3,
ZM>                                        string sItem4,
ZM>                                        string sItem5)
ZM>        {
ZM>            Invoke(delegate
ZM>           {
ZM>               ListViewItem LVI = new ListViewItem(sItem1);
ZM>               LVI.SubItems.Add(sItem2);
ZM>               LVI.SubItems.Add(sItem3);
ZM>               LVI.SubItems.Add(sItem4);
ZM>               LVI.SubItems.Add(sItem5);
ZM>               LVI.SubItems.Add(DateTime.Now.ToString());
ZM>               ListView_Log.Items.Add(LVI);

ZM>               if (ListView_Log.Items.Count > 1000)
ZM>                   RemoveItem(ListView_Log.Items.Count - 1);
ZM>           }
ZM>            );
ZM>        }
ZM>


ZM>В результате часть событий не отображаются в форме. Т.е. просто пропадают. Часть приходит с опозданием. В чем может быть проблема?


Вы же их синхронно обрабатываете, тем самым оставляя прослушивание канала на длительное время, что приводит к потерям данных.
Передите на асинхронные вызовы
«Мы с тобой в чудеса не верим, Оттого их у нас не бывает…»
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.