0

我有一个问题:在我的应用程序中,我得到了一些与事件相关的信息,所以对于事件 x,我应该得到一个表单窗口,我可以在其中做一些事情(输入一些文本并单击一个按钮)

我的问题是,对于我的应用程序有 10,000 个用户对象的限制(对于所有 c# 应用程序),而对于我现有的代码,已经占用了 3000 个用户对象(因此大约有 7000 个用户对象是空闲的)。我从 200 个客户那里收到有关每个客户上发生的一些事情的事件的信息。

当我从客户端收到有关事件的信息时,我想以某种方式将其显示为事件日志窗口中的标签,当我单击标签时,应弹出特定的表单窗口(我之前提到过),以便我可以输入一些文本并单击一个按钮。

我需要能够有效地显示此事件日志窗口(因为我可以从每个客户端接收多达 1000 个事件,并且如果此日志中的每个标签占用 1 个对象,这意味着每个客户端将有 1000 个对象(最大,但可能) 所以我会大大超过我的 10000 限制)。

我怎样才能有效地做些什么呢?

目前,对于每个事件,我都会启动一个表单窗口,在该窗口中输入文本并单击一个按钮,但这效率不高(因为我的表单窗口已经占用了 3 个用户对象,并且如果我有最大 3 * 200 个客户端 * 1000 个用户对象我超过到目前为止我的 7000 限制)。

4

2 回答 2

6

我很难理解如何从这样的用户界面获得数千个窗口。如果您为每个单独的通知创建一个标签控件,那么,是的,这可能会很快失控。也让它慢得可怕。

不要使用标签控件,使用 ListBox、ListView、TreeView 或 DataGridView。可以显示多个项目但只使用单个窗口句柄的控件。

于 2011-01-22T20:01:16.557 回答
2

正如 Hans Passant 所说 - Win32 并非旨在以您尝试使用它的方式使用。

一个典型的实现可能如下所示:

替代文字

如果有很多项目(如您所料,几千个),则几乎必须使用快速搜索框来过滤列表中的项目。

如果细节很复杂,您可以将静态 Web 浏览器控件替换为动态生成的 HTML。


如果您坚持每个事件的按钮(我不建议您的 UX 使用),您需要自己渲染它,这是 GDI 中的 PITA。或使用网络浏览器控件

于 2011-01-22T20:34:00.913 回答