无法隐式转换类型';System.Threading.Tasks.Task<;字符串>;到';字符串

本文关键字:字符串 Task Tasks lt Threading gt System 转换 类型 | 更新日期: 2023-09-27 18:28:04

我有一个WCF服务,该服务具有返回字符串的方法。

WCF服务:

public string selectName(int input)
    {
        string firstN, surN,result;
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT FirstName, Surname FROM tbUserAccounts WHERE StudentID = @ID", con);
        cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = input;
        SqlDataReader reader = cmd.ExecuteReader();
        if (reader.Read())
        {
            firstN= reader["FirstName"].ToString();
            surN = reader["Surname"].ToString();
            result = firstN + " " + surN;
            con.Close();
            return result;
        }
        else
        {
            con.Close();
            return string.Empty;
        }
   }

此方法适用于web服务端。我已经尝试了WCFTest客户端,并返回了预期的值。现在,在应用程序方面,我正试图使用这些值来添加到我的静态类变量中:

 private void btnSignIn_Click_1(object sender, RoutedEventArgs e)
    {
        Login._name = ServiceClientObj.selectNameAsync(int.Parse(studentIdBox.Text));
        Frame.Navigate(typeof(WelcomePage));

    }

ServiceClientObj.selectNameAsync(int.Parse(studentIdBox.Text))'的下划线中有一个错误,表示

Cannot implicitly convert type 'System.Threading.Tasks.Task<String> to 'string'

我不熟悉WCF服务,所以我不完全了解异步的使用。

如有任何帮助或解释,我们将不胜感激。非常感谢。

无法隐式转换类型';System.Threading.Tasks.Task<;字符串>;到';字符串

这样试试:

private async void btnSignIn_Click_1(object sender, RoutedEventArgs e)
{
    Login._name = await ServiceClientObj.selectNameAsync(int.Parse(studentIdBox.Text));
    Frame.Navigate(typeof(WelcomePage));
}

异步方法selectNameAsync返回Task<string>,这是一种承诺,它将来会返回string,为了等待这个字符串结果,你可以使用关键字await,但要使用它,你的方法应该有async关键字。

或者你可以使用这个方法的同步版本selectName,如果它也是由WCF生成的,代码如下:

private void btnSignIn_Click_1(object sender, RoutedEventArgs e)
{
    Login._name = ServiceClientObj.selectName(int.Parse(studentIdBox.Text));
    Frame.Navigate(typeof(WelcomePage));
}