RTFConsoleTextWriter.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Text;
  2. namespace qdr.app.tools.qfu.gui
  3. {
  4. internal class RTFConsoleTextWriter : TextWriter
  5. {
  6. public override Encoding Encoding => Encoding.UTF8;
  7. private RichTextBox _richTextBox;
  8. public RTFConsoleTextWriter(RichTextBox outputRtfBox)
  9. {
  10. _richTextBox = outputRtfBox ?? throw new ArgumentNullException(nameof(outputRtfBox));
  11. }
  12. public override void WriteLine(string? value)
  13. {
  14. if (value == null) return;
  15. Write(value);
  16. }
  17. public override void Write(string? value)
  18. {
  19. if (value == null) return;
  20. // Convert the string to RTF format
  21. string rtfValue = ConvertToRtf(value);
  22. // Write the RTF formatted string to the console
  23. if (_richTextBox.InvokeRequired)
  24. {
  25. _richTextBox.Invoke(new Action(() => AppendRtfText(rtfValue)));
  26. }
  27. else
  28. {
  29. AppendRtfText(rtfValue);
  30. }
  31. }
  32. private void AppendRtfText(string rtfValue)
  33. {
  34. _richTextBox.AppendText(rtfValue);
  35. _richTextBox.SelectionStart = _richTextBox.TextLength;
  36. _richTextBox.ScrollToCaret();
  37. }
  38. private string ConvertToRtf(string value)
  39. {
  40. return value + "\r";
  41. }
  42. }
  43. }