TextBox滚动条。在Thread中滚动到TextBox的结尾

时间:2011-10-31 12:55:06

标签: c#

我已经尝试了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();

                    });
                }

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

3 个答案:

答案 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则完全锁定。

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

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