【发布时间】:2014-03-19 06:53:24
【问题描述】:
我正在尝试调用嵌套的异步函数,但没有获得所需的数据。 由于我在 Silverlight 中使用 wcf 服务,因此我只能使用异步函数。
在我的代码中,我保存了一组包含用户数据的行。在我保存之前,我需要检查用户名是唯一的。现在我只需要找出第一个,然后跳出循环并向用户显示一条消息。为了简单起见,我已经剥离了所有额外数据的功能,这就是它的外观
private void SaveUsers(bool CloseForm)
{
ObservableCollection<User> _UpdatedUsers = new ObservableCollection<User>();
DatabaseServiceLocal _dataService = new DatabaseServiceLocal(Database);
foreach (UserViewModel _User in _AllUsers)
{
//bool success = _dataService.IsUserNameUnique(_User.UserName, _User.UserID, Database.CurrentClient.ClientID);
if (_User.Dirty && !_User.IsBlank)
{
_dataService.CheckIsUserNameUnique += (s, e) =>
{
if (e.IsUnique)
_UpdatedUsers.Add(_User.SaveAsUser());
else
{
_UpdatedUsers = new ObservableCollection<User>();
csaMessageBox.Show(string.Format("Username {0} is not allowed as it already exists in the system. Please choose a different username.", ""), null);
return;
}
};
_dataService.IsUserNameUnique(_User.UserName, _User.UserID, Database.CurrentClient.ClientID);
}
_dataService.UpdateStaffAndUsersCompleted += (s, e) =>
{
BusyIndicator = false;
if (e.Success)
{
}
if (CloseForm)
ReturnToHomePage();
else
{
LoadUsers();
OnUsersSaved();
}
}
BusyIndicator = true;
BusyMessage = "Saving...";
_dataService.UpdateUsers(Database.CurrentProject.ProjectID, Database.CurrentClient.ClientID, _UpdatedUsers, _DeletedProjectUsers);
}
在这种情况下,我试图查找用户名是否唯一,向用户显示消息并返回。 显然它不是那么简单。我尝试了几种不同的方法,但没有奏效。我如何让它工作?
【问题讨论】:
-
如果您的用户 IsUnique,您想避免 UpdateStaffAndUsers() 调用吗?
-
是的..如果其中一个用户不是唯一的,我不希望 UpdateStaffAndUsers() 函数运行
-
然后放置“_dataService.UpdateUsers(Database.CurrentProject.ProjectID, Database.CurrentClient.ClientID, _UpdatedUsers, _DeletedProjectUsers);”在 CheckIsUserNameUnique 处理程序中
-
能否请您详细说明一下。
标签: c# wcf silverlight asynchronous