在WPF中加载文件时出现异步等待任务错误

dojqjjoe  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(151)

我尝试在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;
}
roejwanj

roejwanj1#

错误1:
事件处理程序必须返回void。在这种情况下,对于不返回值的异步函数,建议使用async void而不是async Task(主要是因为实际上没有其他选择)。
错误二:
第二个UploadFiles必须返回一个Task<bool>,而不是bool,这样await才有意义。
此外,由于这是一个实际上执行异步操作的函数,所以您可能会等待它成为async Task<bool>,然后在实际的上传代码中使用await,但这可能取决于您的实际目标。
因此,作为总结,您的代码片段应该像这样调整:

UploadBtnClick = new RelayCommands(UploadBtnExecute,UploadBtnCanExecuteUpload);

public async void UploadBtnExecute(object param)
{
    Progress windowShow = new Progress();
    windowShow.Show();
    await UploadFiles();
    windowShow.Hide();
}

public async Task<bool> UploadFiles(List<Item> selectedFiles)
{
    // do some upload code here
    // using await ....
    return true;
}

// alternatively:
public Task<bool> UploadFiles(List<Item> selectedFiles)
{
    // do some upload code here
    return Task.FromResult(true);
}
qmelpv7a

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.

相关问题