【发布时间】:2016-01-29 14:50:41
【问题描述】:
我正在尝试在 c# 中执行异步功能。我能够使用此代码获得它:
private async Task loadData()
{
try
{
await Task.Run(() => { testTableAdapter.Fill(testDataSet.tbl); });
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
但由于我试图访问 UI 控件,因此我尝试在不执行 Task.Run 的情况下执行此操作(因此我没有启动新的工作线程),并且我收到了一个我不理解或怎么修。
private async Task loadData()
{
try
{
await testTableAdapter.Fill(testDataSet.tbl);
perComboBox.text = loadedSearch.toString();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
错误是:
严重性代码描述项目文件行错误 CS1061 'int' 确实 不包含“GetAwaiter”的定义,也没有扩展方法 可以找到接受“int”类型的第一个参数的“GetAwaiter” (您是否缺少 using 指令或程序集引用?)
【问题讨论】:
-
看来问题出在您省略的
// code位上。在没有更多上下文的情况下,不清楚您在这里真正想要做什么。 -
它是一个数据集填充,我编辑了 OP。对不起!
-
对,所以问题是这是一个同步操作。您不能使用 async/await 神奇地使同步操作异步。现在,您尝试在该代码的哪个位置访问 UI 控件?
-
它只是更改组合框文本的值,但错误发生在等待时。有没有你知道的异步填充数据集?
-
什么在改变组合框的值?这是绑定到数据表的组合框吗?也许您应该取消绑定,填充,然后重新绑定...
标签: c# wpf asynchronous task