gpt4 book ai didi

c# - 如何使用异步持续更新 GUI

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:31 25 4
gpt4 key购买 nike

刚刚创建了一个WPF项目.net 4.6

并把这段代码放在里面

lbl1 是 GUI 上的标签

但标签永远不会更新或 while 循环只继续 1 次

        private void Button_Click_1(object sender, RoutedEventArgs e)
{
var t = Task.Run(
async () =>
{
await AsyncLoop();
});

}

async Task AsyncLoop()
{
while (true)
{
string result = await LoadNextItem();
lbl1.Content = result;
}
}

private static int ir11 = 0;
async Task<string> LoadNextItem()
{
ir11++;
return "aa " + ir11;
}

最佳答案

C# 编译器向您发出警告,告诉您问题所在。

具体来说,这个方法不是异步的:

async Task<string> LoadNextItem()
{
ir11++;
return "aa " + ir11;
}

编译器消息将通知您此async 方法没有await 语句,因此将同步 运行。您应该只在有意义的地方使用 async,通常用于基于 I/O 的操作,例如:

async Task<string> LoadNextItemAsync()
{
await Task.Delay(100); // Placeholder for actual asynchronous work.
ir11++;
return "aa " + ir11;
}

或者,如果您没有有异步操作,而是有一些紧密的 CPU 绑定(bind)循环,那么您可以通过 Task.Run< 将它们推送到后台线程:

string LoadNextItem()
{
ir11++;
return "aa " + ir11;
}

while (true)
{
string result = await Task.Run(() => LoadNextItem());
lbl1.Content = result;
}

关于c# - 如何使用异步持续更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638911/

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