RichTextBox_logs.AppendText(Environment.NewLine);返回两条新线?

Posted

技术标签:

【中文标题】RichTextBox_logs.AppendText(Environment.NewLine);返回两条新线?【英文标题】:RichTextBox_logs.AppendText(Environment.NewLine); is returning two new lines? 【发布时间】:2021-11-08 12:25:39 【问题描述】:

我不知道为什么,但它总是输入两个新行:

private void getMyIPAddress()

    String Address = "";
    this.Dispatcher.Invoke(() =>
    
        this.RichTextBox_logs.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
    );
    while (true)
    
        this.Dispatcher.Invoke(() =>
        
            this.RichTextBox_logs.AppendText(Environment.NewLine);
            
            //this.RichTextBox_logs.ScrollToEnd();
        );
        WebRequest request = WebRequest.Create("http://checkip.dyndns.com/");
        try
        
            using (WebResponse response = request.GetResponse())
            
                using (StreamReader stream = new StreamReader(response.GetResponseStream()))
                
                    Address = stream.ReadToEnd();
                
                int first = Address.IndexOf("Address: ") + 9;
                int last = Address.IndexOf("</body>");               

                if (CurrentAddressHolder != Address.Substring(first, last - first))
                
                    CurrentAddressHolder = Address.Substring(first, last - first);

                    this.Dispatcher.Invoke(() =>
                    
                        this.textBox_ip.Text = CurrentAddressHolder;
                    );
                    
                

                this.Dispatcher.Invoke(() =>
                
                    this.RichTextBox_logs.AppendText("IP is " + CurrentAddressHolder);
                );
            
        
        catch(Exception e)
        
            this.Dispatcher.Invoke(() =>
            
                this.RichTextBox_logs.AppendText(e.ToString());
            );
        
    

我是多线程新手,我不确定它是否会影响新行的语法。

我们非常欢迎任何输入或代码修订/改进。谢谢。

【问题讨论】:

请描述一下“总是输入两个新行”。因为在所附的屏幕截图上一直只添加一行 - IP is 49.145.41.47 如果真的每次都加了两个return,你有没有试过把调试日志放在this.RichTextBox_logs.AppendText(Environment.NewLine);this.RichTextBox_logs.AppendText("IP is " + CurrentAddressHolder);后面? 【参考方案1】:

看来你的问题是行距。

解决方案一:

使用以下方法代替AppendText() 方法向RichTextBox 添加文本行:

public void AddText(RichTextBox rtb, string message, double spacing = 4)

    var paragraph = new Paragraph()  LineHeight = spacing ;
    paragraph.Inlines.Add(new Run(message));
    rtb.Document.Blocks.Add(paragraph);

使用此方法,您将能够通过设置 LineHeight 值以编程方式更改段落之间的行距。

使用此方法时无需添加Environment.NewLine。每个块(段落)将自动格式化为不同的行。

解决方案二:

尝试更改段落边距(参见以下帖子https://***.com/a/445897/6630084):

<RichTextBox x:Name="RichTextBox_logs" >
    <RichTextBox.Resources>
        <Style TargetType="x:Type Paragraph">
            <Setter Property="Margin" Value="0"/>
        </Style>
    </RichTextBox.Resources>
    ...
<RichTextBox>

【讨论】:

以上是关于RichTextBox_logs.AppendText(Environment.NewLine);返回两条新线?的主要内容,如果未能解决你的问题,请参考以下文章