WaitAll阻止UI

gia*_*isf 0 c# wpf

我有一个站点刮板,用寻呼结果擦除网站.

对于每个页面,我尝试运行一个任务以使其更快,但冻结.

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)

我做错了什么?

Igo*_*gor 7

我假设您使用的是支持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)