无法将类型 'System.Threading.Tasks.Task<String> 隐式转换为 'string'
Cannot implicitly convert type 'System.Threading.Tasks.Task<String> to 'string'
我有一个 WCF 服务,方法是 return 一个字符串。
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 客户端和 returns 预期值。
现在在应用程序方面,我正在尝试使用这些值添加到我的静态 class 变量中:
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 服务,所以我不完全了解异步的使用。
如有任何帮助或解释,我们将不胜感激。谢谢。
这样试试:
private async void btnSignIn_Click_1(object sender, RoutedEventArgs e)
{
Login._name = await ServiceClientObj.selectNameAsync(int.Parse(studentIdBox.Text));
Frame.Navigate(typeof(WelcomePage));
}
异步方法 selectNameAsync
returns Task<string>
这是一种承诺,它会 return 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));
}
我有一个 WCF 服务,方法是 return 一个字符串。
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 客户端和 returns 预期值。 现在在应用程序方面,我正在尝试使用这些值添加到我的静态 class 变量中:
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 服务,所以我不完全了解异步的使用。
如有任何帮助或解释,我们将不胜感激。谢谢。
这样试试:
private async void btnSignIn_Click_1(object sender, RoutedEventArgs e)
{
Login._name = await ServiceClientObj.selectNameAsync(int.Parse(studentIdBox.Text));
Frame.Navigate(typeof(WelcomePage));
}
异步方法 selectNameAsync
returns Task<string>
这是一种承诺,它会 return 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));
}