这里是一个建筑问题。
我有一个需要发送到 Web 服务并在数据库中创建的列表(通过列表视图选择)。我希望能够一次更新一个,然后使用返回的 ID 更新进度条、列表视图和本地列表,而不锁定 uithread(虽然我将锁定列表视图/搜索控件等,但它们只需要能够以不同的形式完成其他任务)。
此刻我考虑了以下内容(对大多数人来说都是新的)
后台工作人员 - 这里唯一的问题是 progressChanged 只返回一个 int 所以我发现很难返回我需要的所有信息。
任务 - 当我只需要返回一个对象然后处理该信息时(例如从本地数据库获取列表然后填充列表视图,效果很好),我正在使用这些。我不知道如何生成一个线程,该线程依次执行循环并在每次传递结束时更新 UI 线程。
parallel.foreach - 不要认为这适用于 Web 服务元素。
到目前为止我尝试过的所有东西,要么锁定 UI,要么得到跨线程异常。
我想我正在寻找可以让我这样做的东西
createUsers(ref List<users> _users)
{
foreach(user _u in _users)
{
//call webservice and update - it returns an ID or null
string newID = webCreate(_u);
if (newID != null)
{
ListViewItem lvi = listview1.FindText(_u.ListID);
lvi.SubItems[5].Text = newID;
_u.newID = newID;
}
else
{
lvi.SubItems[5].Text = "Error";
}
progressbar.value++
}
}
.net 4.0 中似乎有很多线程选项,我只是想不出哪一个最适合我。任何指针都会很棒。
谢谢,皮特。