Здравствуйте, 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>В результате часть событий не отображаются в форме. Т.е. просто пропадают. Часть приходит с опозданием. В чем может быть проблема?
Вы же их синхронно обрабатываете, тем самым оставляя прослушивание канала на длительное время, что приводит к потерям данных.
Передите на асинхронные вызовы