, как указано другими, существует возможное дублирование с более ранним вопросом. Однако, пожалуйста, см. Фрагмент кода ниже. Вам не нужно получать длину текста, который вы добавляете, чтобы изменить его форматирование, просто установите формат перед добавлением. Это (я думаю) дает лучшую производительность, если у вас много текста в текстовом поле.
Это будет работать до тех пор, пока пользователь не будет выбирать в текстовом поле, тогда произойдет странное, что я не могу объяснить. Может быть, кто-то еще может просветить нас? Та же проблема возникает с решением, предложенным в Измените цвет текста в WinForms RichTextBox . Я заменил «:», который у вас был после имени пользователя, чтобы просто получить образец кода для работы с тегом DateTime, это можно легко изменить в «Split».
private void AddText(string text)
{
string[] str = text.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
if (str.Length == 2)
{
richTextBox1.DeselectAll();
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Bold);
richTextBox1.AppendText(Environment.NewLine + str[0] + ";");
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Regular);
richTextBox1.AppendText(str[1]);
} // Else?? Well, do something else..
}
И вызов:
private void button1_Click(object sender, EventArgs e)
{
AddText(DateTime.Now.ToString() + " - Mike; Did something");
}
Вы можете использовать оператор from
из RxJs, который преобразует любое Обещание в Observable и далее связывает его (возможно, используя flatMap
). См. https://www.learnrxjs.io/operators/creation/from.html
Подобные вопросы отвечают здесь:
Возврат Наблюдаемый внутри Обещания
Как вернуть Observable после разрешения Promise в Ionic 2 / Angular 2? (упомянутый здесь оператор fromPromise
должен быть заменен новым оператором from
) [ 1118]
Другой вариант - использовать async
await
ключевые слова в Typesript / ES6. Везде, где вы вызываете метод uploadFile
, просто используйте (await uploadFile(formInstanceId, questionId, repeatId, filePath, isEquipment))
, который будет возвращать наблюдаемую, которая была возвращена методом networkService.postFile()
.
Ваш метод станет:
public async uploadFile(formInstanceId, questionId, repeatId, filePath, isEquipment): Promise<Observable<any>> {
const result = await this._file.resolveLocalFilesystemUrl(filePath);
console.log("fileSelected", result);
let fileName = result.name;
let nativeURL = result.nativeURL;
let path = nativeURL.substring(0, nativeURL.lastIndexOf("/"));
const buffer = await this._file.readAsArrayBuffer(path, fileName);
let imgBlob = new Blob([buffer], {type: "image/jpeg"});
let params = {fileName: 'attachment'};
let query = this.encodeQueryData(params);
let uploadFileURL = this._networkService.serverUrl + '/api/upload?' + query;
return this._networkService.postFile(uploadFileURL, fileName, imgBlob).pipe(map(response => {
console.log(response);
return {
formInstanceId: formInstanceId,
questionId: questionId,
repeatId: repeatId,
filename: response[0].filepath,
isEquipment: isEquipment
};
},
error => {
return throwError(error);
}
));
}
Вот как вы его потребляете:
(await uploadFile(formInstanceId, questionId, repeatId, filePath, isEquipment)).subscribe(result=> { /* ...Your code here... */ });
Ссылка на асинхронное ожидание: https://www.typescriptlang.org /docs/handbook/release-notes/typescript-1-7.html