Я нашел ответ на свой вопрос:
, чтобы избавиться от BeginInvoke и сохранить функциональность, как было задумано в исходном коде, мне пришлось переписать это:
private void SearchDevicesEvent(object sender,
ClassListOfDevices.EventSearchDevicesArg e)
{
BeginInvoke(new ClassListOfDevices.SearchDevicesEventHandler(UpdataSearchDevicesEvent),
new[] { sender, e });
}
[114 ] в это:
private void SearchDevicesEvent(object sender,
ClassListOfDevices.EventSearchDevicesArg e)
{
UpdataSearchDevicesEvent(object sender,
ClassListOfDevices.EventSearchDevicesArg e)
{ //do stuff.... }
}
Я бы использовал std :: vector
. Большинство необходимых вам операций можно выполнить с использованием STL с диапазонами итераторов. Также помните, что если вам действительно нужны необработанные данные, то & v [0]
гарантированно даст указатель на базовый массив.
Вы можете использовать std :: string
также для двоичных данных. Длина данных в std :: string
хранится явно и не определяется нулевым завершением, поэтому нулевые байты не имеют специального значения в std :: string
.
std :: string
часто более удобен, чем std :: vector
, поскольку он предоставляет много методов, которые полезны для работы с двоичными данными, но не предоставлены вектором
. Для разбора / создания двоичных данных полезно иметь такие вещи, как substr ()
, перегрузки для +
и std :: stringstream
. Для векторов алгоритмы из <алгоритм>
могут быть использованы для достижения тех же эффектов, но они более неуклюжи, чем строковые методы.
Вы должны использовать std :: vector
или std :: vector
(если у вас современный заголовок stdint.h
). Нет ничего плохого в использовании unsigned char []
или uint8_t []
, если вы работаете с буферами фиксированного размера. Когда std :: vector
действительно сияет, это когда вам нужно часто увеличиваться или добавлять свои буферы. Итераторы STL имеют ту же семантику, что и указатели, поэтому алгоритмы STL будут одинаково хорошо работать с std :: vector
и простыми старыми массивами.
И, как указал CAdaker, выражение & v [0]
гарантированно даст вам базовый указатель на буфер вектора (и он гарантированно будет одним непрерывным блоком памяти).