我尝试在UploadBtnExecute方法中进行异步操作,我是在wpf上操作的,但是显示错误。
错误是:-错误1::-'
任务UploadBtnExecute(object)'具有错误的返回类型
错误2::- '
bool'不包含'GetAwaiter'的定义,并且找不到接受类型为'bool'的第一个参数的可访问扩展方法'GetAwaiter'(是否缺少using指令或程序集引用?)
我尝试过的:
按钮点击事件触发函数
UploadBtnClick = new RelayCommands(UploadBtnExecute,UploadBtnCanExecuteUpload);
public async Task UploadBtnExecute(object param)
{
Progress windowShow = new Progress();
windowShow.Show();
await UploadFiles();
windowShow.Hide();
}
public bool UploadFiles(List<Item> selectedFiles)
{
//do some upload code here
return true;
}
2条答案
按热度按时间roejwanj1#
错误1:
事件处理程序必须返回
void
。在这种情况下,对于不返回值的异步函数,建议使用async void
而不是async Task
(主要是因为实际上没有其他选择)。错误二:
第二个
UploadFiles
必须返回一个Task<bool>
,而不是bool
,这样await
才有意义。此外,由于这是一个实际上执行异步操作的函数,所以您可能会等待它成为
async Task<bool>
,然后在实际的上传代码中使用await
,但这可能取决于您的实际目标。因此,作为总结,您的代码片段应该像这样调整:
qmelpv7a2#
如果你仍然得到这个错误,即使代码编写正确,就像我使用IAsyncOperation类型函数一样,你可能需要检查是否安装了System.Runtime.WindowsRuntime的NuGet包。我以为我已经创建了它的引用,但它没有添加。安装这个包修复了我的所有错误。As seen in my screenshot, go to References > Manage Nuget Packages > Browse "System.Runtime.WindowsRuntime" and make sure it is installed.