Похоже, что проблема, с которой вы столкнулись, состоит в том, что расчеты синхронизации внутри вашего цикла while
никогда не имеют шансов на запуск, когда read
блокирует вход. В этом случае вы можете направить вывод tail
в цикл while true
, внутри которого вы можете сделать if read -t $timeout
:
log_file=/tmp/app.log
threshold=120
timeout=10
tail -Fn0 "$log_file" | while true; do
if read -t $timeout line; then
echo "${line}" | awk '/PATTERN/ { system("touch pattern.tmp") }'
fi
# code to calculate how long ago pattern.tmp touched and same is assigned to diff
if [ ${diff} -gt ${threshold} ]; then
echo "Error"
else
echo "Clear"
fi
done
Как отметил Эд Мортон, все имена переменных caps не являются хорошая идея в скриптах bash, поэтому я использовал строчные имена переменных.
Создать фактический XAML пользователем в RichTextBox:
TextRange tr = new TextRange(myRichTextBox.Document.ContentStart,
myRichTextBox.Document.ContentEnd);
MemoryStream ms = new MemoryStream();
tr.Save(ms, DataFormats.Xaml);
string xamlText = ASCIIEncoding.Default.GetString(ms.ToArray());
Править: У меня нет кода передо мной для тестирования, но экземпляр TextRange
тип имеет a Save
(к потоку) метод, который берет a DataFormats
параметр, который может быть DataFormats.Rtf
Существует 2 класса RichTextBox, один от платформы winforms и один от платформы WPF:
System.Windows.Controls.RichTextBox wpfBox;
System.Windows.Forms.RichTextBox winformsBox;
Только RichTextBox Winform имеет свойство Rtf, другой имеет свойство Document, которое содержит FlowDocument.