gpt4 book ai didi

c# - 刷新 UI 以反射(reflect)添加到列表中的项目

转载 作者:行者123 更新时间:2023-11-30 17:36:39 26 4
gpt4 key购买 nike

在显示我的 UI 时,数据正在后端传递并添加到 List<string>我又想在我的用户界面上显示。

我见过几个使用后台工作程序的示例,但是由于我如何布局我的用户控件并以编程方式构建它们,我无法访问实际组件。

问题:如何在我的 UI 后面重复运行此方法,而不会在循环中锁定我的 UI?

public void UpdatePanel()
{
foreach (var item in list)
{
AddMethod(item);
}
}

最佳答案

如果可能,您可以使用 BindingList<T> 作为一种选择,而不是使用循环或时间间隔来监视列表。或 ObservableCollection<T> 并在列表更改时收到通知。

然后您可以在您访问的事件处理程序中更新用户界面 ListChanged BindingList<T>的事件或 CollectionChanged ObservableCOllection<T>的事件.

示例

这是一个基于 ObservableCollection<string> 的例子.

ObservableCollection<string> list;
private void Form1_Load(object sender, EventArgs e)
{
list = new ObservableCollection<string>();
list.CollectionChanged += list_CollectionChanged;
list.Add("Item 1");
list.Add("Item 2");
list.RemoveAt(0);
list[0] = "New Item";
}
void list_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
var items = string.Join(",", e.NewItems.Cast<String>());
MessageBox.Show(string.Format("'{0}' Added", items));
}
else if (e.Action == NotifyCollectionChangedAction.Remove)
{
var items = string.Join(",", e.OldItems.Cast<String>());
MessageBox.Show(string.Format("'{0}' Removed", items));
}
else if (e.Action == NotifyCollectionChangedAction.Replace)
{
var oldItems = string.Join(",", e.OldItems.Cast<String>());
var newItems = string.Join(",", e.NewItems.Cast<String>());
MessageBox.Show(string.Format("'{0}' replaced by '{1}'", oldItems, newItems));
}
else
{
MessageBox.Show("Reset or Move");
}
}

关于c# - 刷新 UI 以反射(reflect)添加到列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39131962/

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