.net 如何禁用文本框的撤销/重做功能?

kuarbcqp  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(126)

我认为我正在开发的一个应用程序中存在内存泄漏。使用JetBrains DotMemory,我发现了大量源自TextBoxBase.get_text()的字符串和字符。经过进一步调查,我发现了关于文本框堆栈的内存泄漏报告(其启用撤消/重做功能)。此外,许多SO用户都说要使用TextBoxBase.IsUndoEnabled..,但在我的Visual Studio(2019)中,这并不被识别为属性。.我使用的是.NET 4.7.2,快速谷歌确实显示了MSDN文档中列出的属性。我现在意识到文本框可能根本不是这项工作的工具,然而,我很想知道内存泄漏的确切原因.(.NET Framework)?如果我将文本框ReadOnly属性设置为true,这就足够了吗?当我在这里的时候,我想我会包括我认为是我冒犯的代码..任何和所有的评论,问题和/或关注都超出了赞赏,谢谢。(为我的第一个SO问题欢呼)。

_LineBuilder.LineBuilt += (o, e) => {

            if (PortForm.initial_connection_happened) {
                /* FW Tester Appendage */
                raw_fw_data_tb.InvokeIfRequired(() => {
                    raw_fw_data_tb.AppendText(String.Concat(e.line, "\r\n"));
                    /* Gets rid of old data for memory sakes. */
                    if (raw_fw_data_tb.Lines.Length > 10000) {
                        /* Get rid of first 9000 lines, keeping the last 1000 */
                        for (int i = 0; i < 9000; i++) {
                            int count = raw_fw_data_tb.Lines[0].Length;
                            raw_fw_data_tb.Text = raw_fw_data_tb.Text.Remove(0, count + Environment.NewLine.Length);
                        }
                    }
                    raw_fw_data_tb.SelectionStart = raw_fw_data_tb.Text.Length;
                    raw_fw_data_tb.ScrollToCaret();
                });

字符串
我还没有尝试将ReadOnly属性设置为true,因为程序运行起来需要相当长的时间。

vyswwuz2

vyswwuz21#

尝试使用类似这样的方法来删除前9,000行:

raw_fw_data_tb.AppendText(String.Concat(e.line, "\r\n"));
if (raw_fw_data_tb.Lines.Length > 10000)
{
    raw_fw_data_tb.Lines = (new List<String>(raw_fw_data_tb.Lines)).Skip(9000).ToArray();
}
raw_fw_data_tb.SelectionStart = raw_fw_data_tb.Text.Length;
raw_fw_data_tb.ScrollToCaret();

字符串

相关问题