文本框滚动条.在线程内滚动到文本框的末尾

本文关键字:文本 滚动条 线程 滚动 | 更新日期: 2023-09-27 18:12:56

我已经尝试了所有的答案建议在堆栈溢出让我的滚动条移动到底部作为文本正在更新,但我有一种感觉它不工作,因为它在一个线程内。我的代码如下…

foreach(HtmlAgilityPack.HtmlNode paginationUser in paginationUsers) {
                    String userUrl = paginationUser.GetAttributeValue("id","");
                    this.Invoke((MethodInvoker)delegate { 
                        txtLog.AppendText("...... Added " + userUrl + Environment.NewLine);
                        txtLog.Select(txtLog.Text.Length, 0);
                        txtLog.ScrollToCaret();
                    });
                }

是线程导致代码不工作吗?有什么更好的解决方案吗?

文本框滚动条.在线程内滚动到文本框的末尾

尝试添加以下代码:

  TextBox.SelectionStart = txtLogEntries.Text.Length;
  TextBox.ScrollToCaret();

我觉得用这个代码更好:

TextBox.AppendText("your text")

会自动滚动到新添加的文本&自动滚动动画似乎比TextBox.ScrollToCaret()方法更流畅

你可以把这段代码放在TextChanged TextBox事件

我在WPF中遇到了同样的问题,使用线程写入文本框。它工作得很好,直到我添加了ScrollToEnd。

我没有解决办法,只是一些评论。

您没有锁定控件。如果你用胎面填充的话,你应该这样做。如果我使用Invoke,它确实可以工作(但是UI变得无响应)。我使用BeginInvoke,这是平滑的,但然后它完全锁定,如果我使用ScrollToEnd。

这似乎是某种触发问题,一个事件导致另一个事件。

尝试缓慢地输入文本,看看会发生什么,工作线程可能会淹没文本框,给它一个真正困难的时间,不允许主线程做它的事情。