嗨,我是Silverlight/async编程的新手
情况:Silverlight应用作为一个web资源来做CRUD操作
问题:实体有一个插件步骤注册为同步。然后在silverlight中,当代码执行EndSaveChages(结果)方法时,我得到一个SystemException。
收到的消息是:
当前对象没有引起异步结果。参数名称:asyncResult
我尝试使用锁,线程。Sleep, While和Dispatcher都没有帮助。有一种方法可以保持进程,直到我收到asycResult?
代码:private void OnUpdateRecordComplete (IAsyncResult result)
{
try
{
while (!result.IsCompleted)
{
}
Thread.Sleep(1000);
xrmsm_scores updatedRecord = result.AsyncState as xrmsm_scores;
context.EndSaveChanges(result);
// MessageBox.Show("Save Completed!");
MessageBox.Show(updatedRecord.xrmsm_studentsName.Trim() + "'s Grade has been updated!");
//MessageBox.Show("HUGE SUCCESS!");
}
catch (DataServiceRequestException se)
{
MessageBox.Show("The score information could not be saved.nReason: " + getXMLError(se), "Error!", MessageBoxButton.OK);
studentName = string.Empty;
}
catch (SystemException se)
{
isSaved = true;
//string error = se.Message.Replace('"', ''').Replace("rn", @"n");
//MessageBox.Show("OnUpdateRecordComplete SystemExeption Catch: " + error);
//It always goes on catch because we are not using MVC System
//It saves it anyways :P
//MessageBox.Show("OnCreateRecordComplete");
//syncContext.Send(new SendOrPostCallback(showErrorDetails), se);
}
}
你不应该做睡觉或等待。我的理解是,完整的事件处理程序只调用一次async调用返回。
你看过这个样品吗?它应该能帮助你找到正确的方向。
示例:使用Silverlight创建、检索、更新和删除REST端点