我有一个站点刮板,用寻呼结果擦除网站.
对于每个页面,我尝试运行一个任务以使其更快,但冻结.
var pageCount = getPageCount(txtSearchQuery.Text);
var tasks = new Task[pageCount];
var link = txtSearchQuery.Text;
for (var i = 1; i <= pageCount; i++)
{
tasks[i-1] = new Task(new Action(() => { Scrape(link, i); }));
tasks[i-1].Start();
}
Task.WaitAll(tasks);
MessageBox.Show("Complete");
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我假设您使用的是支持async/await的最新版本的.net
更改方法签名以使其异步并使用Task.WhenAll等待任务结果.这将释放UI线程,即.不会挂起UI.
// normally you do not return void but a Task BUT with WPF events
// (like on button click) void is required instead
protected async void MyMethod() {
// Task.WaitAll(tasks); // replace this with
await Task.WhenAll(tasks); // this will not hang your UI
// rest of your code that you want to execute
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |