gpt4 book ai didi

c# - Task 卡住 UI 线程

转载 作者:行者123 更新时间:2023-11-30 20:56:54 26 4
gpt4 key购买 nike

我的代码块:

Dispatcher.BeginInvoke(() => {
var Users = GetUsers().Result;
// proceed...
}

private Task<List<User>> GetUsers()
{
var tcs = new TaskCompletionSource<List<User>>();
wbclient.DownloadStringCompleted += (o, e) => {
if (e.Error == null)
tcs.SetResult(JsonConvert.DeserializeObject<List<User>>(e.Result));
else
tcs.TrySetException(e.Error);
};
wbclient.DownloadStringAsync(someUri);
return tcs.Task;
}

我想在继续之前获取所有用户。所以我在调度程序中调用 GetUser 方法。我只想等到 DownloadStringCompleted 事件发生然后返回。但是使用上面的代码,UI 卡住了。感谢您的帮助。

注意:

我正在使用 windows-phone 7,它不支持 async await

最佳答案

您应该使用延续并删除阻塞的主线程中的 Dispatcher.BeginInvoke 调用和 .Result 调用:

GetUsers().ContinueWith(t => 
{
List<User> users = t.Result;
this.TextBlock1.Text = "Complete";
}, TaskScheduler.FromCurrentSynchronizationContext());

请注意我如何在延续中使用 TaskScheduler.FromCurrentSynchronizationContext() 调用以确保在主 UI 线程上编码此延续。

关于c# - Task<T> 卡住 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17249610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com