【发布时间】:2022-01-21 17:54:23
【问题描述】:
我创建了一个 Windows 窗体 - Form1,用于理解 C# 中的 async-await,它只有两个控件:一个按钮 (btnDemo) 和一个标签 (lblRandom)。我正在使用 .NET Framework 4.0。
这是代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void btnDemo_Click(object sender, EventArgs e)
{
Task<int> myTask = new Task<int>(GetNumber);
myTask.Start();
lblRandom.Text = "Getting...";
lblRandom.Text = await myTask;
}
private int GetNumber()
{
Thread.Sleep(10000);
return new Random().Next(1, 100);
}
}
当我尝试运行此代码时,它显示以下错误(在await myTask 行):
“
Task<int>”不包含“GetAwaiter”的定义,并且找不到接受“Task<int>”类型的第一个参数的扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用? )
有人可以帮我理解这个错误并为上述代码提供解决方案吗?
【问题讨论】:
-
您的代码文件顶部可能缺少
using System.Threading.Tasks;。 -
我看到了一个返回 Task
的方法 (GetNumber),您尝试将其结果分配给 string。如果您的所有参考资料都正确,它应该会给您另一种类型的错误。 -
您的目标是 .NET 4.0,这是 a) 大量过时的; b) 没有适当的 async/await 支持。我强烈建议您更新您所针对的 .NET 版本。
-
@Llama:我已经检查过了,我没有错过 using 指令。
-
@Steve:即使我将赋值更改为正确的
type(即int,该错误仍然保持原样......
标签: c# winforms async-await visual-studio-2015