private void ExecuteCommOperation(string errMessage, int retriesCount, CommOperationDelegate commOperation) { do { try { commOperation(); return; } catch (TimeoutException) { WriteDebugLine(string.Format("{0}. Таймаут", errMessage)); throw; } catch (System.ComponentModel.Win32Exception E) { WriteDebugLine(string.Format("{0}. Ошибка {1}: {2}", errMessage, E.NativeErrorCode, E.Message)); if (E.NativeErrorCode == 995 && retriesCount > 0) { // сброс ошибки и повтор попытки WriteDebugLine("Сброс флага ошибки устройства"); CommPort.ClearError(); retriesCount--; Thread.Sleep(10); } else { throw; } } }while (true); }