NetworkStream, там что-то подобное DataReceived для SerialPort? (C#)

Мне нравится следующее, потому что это помещает результаты в вектор, поддерживает строку как delim и дает контроль над хранением пустых значений. Но, это не смотрит как хорошее тогда.

#include 
#include 
#include 
#include 
#include 
using namespace std;

vector split(const string& s, const string& delim, const bool keep_empty = true) {
    vector result;
    if (delim.empty()) {
        result.push_back(s);
        return result;
    }
    string::const_iterator substart = s.begin(), subend;
    while (true) {
        subend = search(substart, s.end(), delim.begin(), delim.end());
        string temp(substart, subend);
        if (keep_empty || !temp.empty()) {
            result.push_back(temp);
        }
        if (subend == s.end()) {
            break;
        }
        substart = subend + delim.size();
    }
    return result;
}

int main() {
    const vector words = split("So close no matter how far", " ");
    copy(words.begin(), words.end(), ostream_iterator(cout, "\n"));
}

, Конечно, Повышение имеет split() , который работает частично как этот. И, если 'пробелом', Вы действительно подразумеваете, что любой тип пробела, с помощью разделения Повышения с is_any_of() работает отлично.

6
задан hlovdal 7 August 2009 в 10:49
поделиться

2 ответа

Нет событий в классе NetworkStream ( см. MSDN ). NetworkStream наследуется от Stream , поэтому он следует модели потока, которая не основана на событиях. Если вам нужно получать данные асинхронно, используйте метод BeginRead

2
ответ дан 10 December 2019 в 02:51
поделиться

Чтобы прояснить ответ Томаса, с объяснением для всех, кто не знаком с методом BeginRead и хочет понять ответ на этот вопрос, вы можете позвонить:

AsyncCallBack MyCallBack = new AsynCallBack(DataReceived);
networkStream.BeginRead(buffer, offset, size, MyCallBack, MyObject);

затем создать функция DataReceived:

private void DataReceived(IAsynResult result)
  {
  //call receive functionality
  }

Это вызовет DataReceived, очень похоже на то, как работает событие SerialPort.DataReceived.

7
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: