我已经尝试了Stack Overflow中的所有答案,以便在文本更新时让我的滚动条移动到底部,但我感觉它不起作用,因为它在一个线程中。我的代码如下......
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();
});
}
是导致代码不起作用的线程吗?什么是更好的解决方案?
答案 0 :(得分:0)
尝试添加此代码:
TextBox.SelectionStart = txtLogEntries.Text.Length;
TextBox.ScrollToCaret();
atTeTextChanged TextBox事件。
答案 1 :(得分:0)
我觉得使用这段代码更好:
TextBox.AppendText("your text")
它会自动滚动到新添加的文本的末尾。与TextBox.ScrollToCaret()
方法相比,自动滚动动画看起来更顺畅
您可以将此代码放在TextChanged TextBox事件
答案 2 :(得分:0)
我遇到了与WPF相同的问题,使用线程写入文本框。它工作正常,直到我添加ScrollToEnd。
我没有解决方案,只是一些评论。
您没有锁定控件。你应该从胎面上填充它。 如果我使用Invoke它确实有效(但UI变得无法响应)。我使用BeginInvoke,它更平滑,但如果我使用ScrollToEnd则完全锁定。
这似乎是某种触发问题,一个事件导致另一个。
尝试慢慢地输入文本,看看会发生什么,工作线程可能会泛滥文本框,给它一个非常困难的时间,不允许主线程做它的事情。