我不确定我在哪个区域出错,可以使用一些帮助。我想我不是在后台正确更新数据网格,或者我没有正确使用任务并行库。我对这两个都不熟悉。
我希望看到我的数据加载,知道我的任务是异步运行的。虽然这只是未来的示例测试应用程序,但此代码将成为用户的响应式表单。
现在所有数据都会在调用代码的末尾加载。以下是我的代码。
(请原谅一些凌乱的命名约定和错误处理,因为我在阅读时已经改变了很多东西,所有我关注的是网格的异步加载)。
private void btnRunSearch_ClickAsync(object sender, RoutedEventArgs e)
{
_isSearching = !_isSearching;
ToggleUIIsSearching(_isSearching);
_webResults.Add(new WebResult { Description = "test item", DisplayUrl = "www.what?", Title = "Random Preload Title", Url = "www.www.www" });
dgWebResults.Items.Refresh();
try
{
// Copy the textbox value to a new variable for thread safety.
string searchTerm = tbSearchTerm.Text;
Task<List<WebResult>> MyTask = Task.Factory.StartNew<List<WebResult>>(() =>
{
return new WebSearchLogic().GetFilteredResults(searchTerm, SearcherKey);
});
Thread.Sleep(4000);
UpdateDataGrid(MyTask.Result, true);
Thread.Sleep(3000);
_webResults.Add(new WebResult { Description = "2test item", DisplayUrl = "2www.what?", Title = "2Random Preload Title", Url = "2www.www.www" });
dgWebResults.Items.Refresh();
}
catch (AggregateException ae)
{
tbSearchTerm.Text = ae.Flatten().Message;
}
catch (Exception ex)
{
tbSearchTerm.Text = ex.Message;
}
}
private void UpdateDataGrid(List<WebResult> newItems, bool append)
{
if (!append)
{
_webResults.Clear();
}
foreach (WebResult wr in newItems)
{
_webResults.Add(wr);
}
dgWebResults.Items.Refresh();
}
基本上我想看到第一个测试项目出现,然后看到其他结果出现,最后看到第二个测试项目出现。
非常感谢任何帮助。
此致 Adam Heeg