C# 使用ListViewItem进行异步编程
我是C#编程新手 我想写一个简单的表单应用程序,在每个操作后的ListView上,我将更新正在发生的事情 我写了一些代码来完成这项工作 应用程序工作正常,但ListView上的更新不正常C# 使用ListViewItem进行异步编程,c#,C#,我是C#编程新手 我想写一个简单的表单应用程序,在每个操作后的ListView上,我将更新正在发生的事情 我写了一些代码来完成这项工作 应用程序工作正常,但ListView上的更新不正常 namespace ReportingTool { public partial class Form1 : Form { public static Form1 form; public Form1() { Ini
namespace ReportingTool
{
public partial class Form1 : Form
{
public static Form1 form;
public Form1()
{
InitializeComponent();
form = this;
WriteToList("1", "Program started");
}
private async void button1_Click(object sender, EventArgs e)
{
WriteToList("2", "Opening Chrome Browser");
PageNavigation driver = new PageNavigation();
await driver.BrowserActions();
WriteToList("3", "Opening TalentLink page");
await driver.GoToTalentLinkPageAsync();
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public void WriteToList(string id, string action)
{
form.Activate();
ListViewItem x = new ListViewItem(id);
x.SubItems.Add(action);
form.listView1.Items.Add(x);
form.listView1.Refresh();
}
}
}
感谢您的帮助。不幸的是,ListView上有一个bug(或缺乏实现)。基本上,若您对现有列表中的任何项目进行了修改,那个么即使在代码中进行了更新,该更新也不会在UI上可见。您必须在ListView中强制刷新ItemSource。我唯一能做到这一点的方法是保存现有的项目列表,将ItemSource设置为null,并将更新后的列表添加到ItemSource,以便:
public void WriteToList(string id, string action)
{
form.Activate();
ListViewItem x = new ListViewItem(id);
x.SubItems.Add(action);
form.listView1.Items.Add(x);
form.listView1.Refresh();
List<YourItems> newList = new List<YourItems>();
newList = form.listView1;
form.listView.ItemSource = null;
form.listView.ItemSource = newList;
}
public void WriteToList(字符串id,字符串操作)
{
form.Activate();
ListViewItem x=新的ListViewItem(id);
x、 增加(行动);
表单.listView1.Items.Add(x);
form.listView1.Refresh();
List newList=新列表();
newList=form.listView1;
form.listView.ItemSource=null;
form.listView.ItemSource=newList;
}
我也不认为设置类的静态字段是一种很好的方法 有什么问题?此代码中没有异步更新,
writeList()
在UI线程上运行,无论是从同步还是异步事件句柄调用,都应该可以正常工作UI是否冻结?broweeseractions()
和GoToTalentLinkPageAsync()
方法做什么?是的,但表单上没有可见的更新。好像它不存在?driver.BrowserActions()为Selenium设置驱动程序,driver.GoToTalentLinkPageAsync()运行其他方法如何在页面上导航,以及执行什么操作等。您能更具体地说明您的问题吗?它是否会给您任何错误消息,或者只是默默地拒绝更新ListView?您没有提到使用数据绑定和ItemSource。没有虫子。使用数据绑定时,需要更新数据源,而不是直接更新ListView。您只需向列表中添加一个新条目,然后在listview上调用Refresh
。例如,\u itemsList.Add(新建您的项目(id、操作);listView
.Refresh();。您不需要手动添加ListViewItem或替换
ItemSource`可能,我从未尝试过。但是您可以看到,他没有在此处使用数据绑定。您是通过Windows窗体中的ItemsSource
.BTW属性使用数据绑定的。这是WPF应用程序吗?还是使用了WPF控件?在这种情况下,您可以告诉我们这将通知控件在每次修改集合时更新自身