gpt4 book ai didi

c# - 在 WinForms 菜单中有一种批量更新的方法

转载 作者:行者123 更新时间:2023-12-02 04:46:34 28 4
gpt4 key购买 nike

我在我的应用程序中构建了一些动态上下文菜单,代码如下:

mi = new ToolStripMenuItem( caption ) { Tag = c, Enabled = true };
context_menu.Items.Insert( n, mi );
mi.Click += new EventHandler( ContextClick);

这很好用。但是,如果项目数量很大(比如 1000),构建菜单可能需要几分钟时间。我意识到菜单中有 1000 个项目是不寻常的,但这里的问题是速度。对于组合框和列表框,可以使用 BeginUpdate()/EndUpdate() 来解决此类操作。有菜单机制吗?

“相似”的代码在VB6项目中运行,运行不到10秒。

最佳答案

使用 context_menu.Items.CopyTo 方法将当前菜单复制到缓冲区中。然后使用 context_menu.Items.Clear() 清除当前集合。根据需要按您希望的顺序更新缓冲区(不触发 UI 更新),然后使用 AddRange(buffer) 将它们放回原处。

示例代码:

Stopwatch sw = new Stopwatch();
sw.Start();

var items = new ToolStripItem[menuStrip1.Items.Count];
menuStrip1.Items.CopyTo(items, 0);

var itemList = new List<ToolStripItem>(items);

for (int i = 0; i < 1000; i++)
itemList.Insert(2, new ToolStripMenuItem { Text = "Hello" + i.ToString() });

menuStrip1.Items.Clear();
menuStrip1.Items.AddRange(itemList.ToArray());

sw.Stop();
label1.Text = sw.ElapsedMilliseconds.ToString();

在我的破旧机器上为 47 毫秒。

关于c# - 在 WinForms 菜单中有一种批量更新的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19682304/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com