简化的 7 个步骤:
- [MainForm] 用户点击 btnAdd 按钮
- 将显示 AddForm
- [AddForm] btnCreate 被点击
- 在 btnCreate_Click 中,我们使用等待器运行 AddProductProcess * 我们将在单击后立即关闭 AddForm *并显示 MainForm
- 在 AddProductProcess 中,我们使用 awaiter 运行 AddProduct
- 我们运行 AddProduct 它将为我们完成漫长的过程并填充应用程序级静态集合:ProductCollection
- [MainForm] 处理 AddProduct 完成后,我们将在 lstProducts 列表框中显示已添加的产品项。
5 段代码:
private void btnAddProduct_Click(object sender, EventArgs e)
{
FormAddProduct fap = new FormAddProduct(SelCol);
fap.ShowDialog();
}
private async void btnCreate_Click(object sender, EventArgs e)
{
string stProduct = txtProductName.Text;
await ProductCollection.AddProductProcess(stProduct);
this.Close();
MainForm.Show();
}
public async Task AddProductProcess(string pName)
{
await Task.Factory.StartNew(() => AddProduct(pName));
// This would be our heavy process
}
public void AddProduct(string pName)
{
ProductItem p = new ProductItem();
p.Name = pName ;
p.Position = Count;
p.GetInfo(); // and some similar heavy methods are inside this
//ProductCollection.Add(p);
}
public void Add(Product product)
{
MainForm.lstProduct.Add(product.Name);
}
“MainForm.lstProduct.Add”导致invalid cross-thread operation
错误
我需要在其上添加任务完成通知,以便以正确的方式将结果添加到 ListBox 你能帮我实现它吗?
我应该将这行代码传递给任务完成后立即执行的代码。
ProductCollection.Add(p);
对这段代码和主题的任何想法表示赞赏,