Можем ли мы поставить функцию обратного вызова внутри DLL?

StackOverflow https://stackoverflow.com/questions/4363893

  •  09-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать методы .NET Serialport из другой программы, которая использует Enity3D Engine.

У меня библиотека класса AC # Class (DLL), которая регистрирует и реализует функцию обратного вызова, когда последовательный порт получает некоторые данные.

public CSerialDll()
{         
   _serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}

void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   int bytes = _serial.BytesToRead;
   _comBuffer = new byte[bytes];
   _serial.Read(_comBuffer, 0, bytes);
   Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer));
}

А потом в моей другой программе я создаю экземпляр класса.

Я хочу знать, будет ли мой перезапись Serial_DatareCeived внутри библиотеки (DLL), будет называться или нет. Я пытаюсь прочитать _Combuffer внутри библиотеки из другой программы, и она всегда пуста (даже если данные приходят при тестировании приложении консоли внутри одного приложения).

Любая помощь значительно ценится.

Спасибо

Это было полезно?

Решение

<HUNCH>

Если бы я был дизайнером класса, я бы поставил данные обратным вызова, поэтому, если вы посмотрите на SerialDataReceivedEventArgs Класс, вы увидите, что внутри это вы буфер с данными.

Итак, после того, как вы получите событие, и вы тогда вызовите прочитанные, вы фактически отказываетесь от данных, которые отправляются вам и запросите больше.

Другими словами, да, тот факт, что это внешняя библиотека, не имеет ничего общего с тем, что он не работает, как следует.

</HUNCH>

Другие советы

Как правило, нет ничего особенного в отношении методов, находящихся в отдельной DLL, до тех пор, пока модификаторы доступа устанавливаются правильно.

Однако в зависимости от того, как вы настроили ваше решение, это может быть боль, чтобы у вас была последняя DLL в вашей папке Bin.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top