внешние компоненты 1С, работа с COM портом

1. serg1234 92 05.06.13 16:07 Сейчас в теме
Скачал шаблон внешней компоненты отсюда http://infostart.ru/public/140411/

Добавил методы для работы с COM

private static SerialPort _serialPort;

public bool OpenPort(string NameCOMPort)
{
 _serialPort = new SerialPort(NameCOMPort, 9600, Parity.None, 8,StopBits.One);
 _serialPort.DataReceived += new SerialDataReceivedEventHandler(Read);

 _serialPort.Open();

  asyncEvent.ExternalEvent("AddIn", "COM", "Тест" );

}

public void Read(object sender, SerialDataReceivedEventArgs e)  
{
 string strData = _serialPort.ReadExisting();
 asyncEvent.ExternalEvent("AddIn", "COM", strData ); 
}

Показать

Компонента регистрируется, срабатывает внешнее событие (в 1с 8 ВнешнееСобытие(Источник, Событие, Данные), Данные = "Тест") )

Вроде все нормально, но при поступлении данных с COM вызывается процедура void Read(object sender, SerialDataReceivedEventArgs e) и 1С вылитает по ошибке.

Убрал строку "asyncEvent.ExternalEvent("AddIn", "COM", strData );" из процедуры Read, все работает не вылетает.

Не могу понять как правильно нужно вызывать ExternalEvent чтобы 1С не вылетала.

Пробовал создавать статическую переменную типа IAsyncEvent _asyncEvent;,
в методе "OpenPort" присваивал ей _asyncEvent = asyncEvent;, а в методе Read вызывал как _asyncEvent.ExternalEvent("AddIn", "COM", strData );, но все равно 1с вылетает по ошибке.

Может я что то делаю не так, подскажите где бок, или дайте пример кода как правильно организовать процесс генерации внешний событий для 1с при каждом поступлении данных с COM порта.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. serg1234 92 05.06.13 17:08 Сейчас в теме
Что, ни у кого нет примерчика похожего?
3. Pistolierro 86 16.01.14 14:08 Сейчас в теме
При регистрации компоненты используй ключ /tlb
4. serj_prog 21.04.23 09:40 Сейчас в теме
Та же ситуация, при вызове внешнего события из иной функции все работает нормально, как только пытаюсь вызвать внешнее событие в функции по приходу данных из ком порта, в этой ситуации 1С вылетает. При отладке компоненты на момент вызова внешнего события вылетает исключительная ошибка "System.Reflection.TargetException: Объект не соответствует конечному типу".
Что интересно, на одном ПК все работает без ошибок, на другом ПК эта же компонента ведет себя вот так, хотя версия NET, 1С платформы ,винды одинакова на этих двух ПК.
Кто нибудь сталкивался с этой ситуацией?
5. acces969 344 21.04.23 11:49 Сейчас в теме
Может быть в параметре передается не примитивный тип, который 1С не умеет обрабатывать?
6. serj_prog 24.04.23 08:40 Сейчас в теме
(5) Для примера я убрал вообще передачу каких либо параметров. Ниже код в котором функция testEvent2() генерирует событие в 1С. В 1С событие привязывается через ДобавитьОбработчик. Так вот в начале открытия порта функция testEvent2() и в 1С событие без проблем срабатывает. Как только я отправляю данные в Порт и с него приходит ответ, снова вызываю эту же функцию уже по приходу данных, и в этот момент 1С просто вылетает.

 testEvent2();
                port = new SerialPort();
                port.PortName = "COM" + _ComNumber.ToString();
                port.BaudRate =  _ComSpeed;
                port.DataBits = 8;
                port.Parity = System.IO.Ports.Parity.None;
                port.StopBits = System.IO.Ports.StopBits.One;
                port.ReadTimeout = 1000;
                port.WriteTimeout = 1000;
                port.DtrEnable = true;
                port.DataReceived += (sender, e) =>
                {
                    testEvent2();

                   
                };
                 
                port.Open();
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот