最近我致力于sharepoint windows phone的集成。我使用 sharepoint 提供的 Web 服务进行通信。
从那里我开始知道 Windows Phone 只支持对 web 服务的异步调用,它开始执行剩余的代码行,一旦我得到响应,它将开始执行它。但在这种情况下,假设我的逻辑取决于 Web 服务的响应,那么调用 Web 服务的异步调用对我来说没有用。我需要在 openreadcompleted 或此类事件等中编写所有逻辑。
这在所有场景中都不起作用,所以我创建了一个类名 CustomTask 用于通信,代码如下:
MainClass
{
foreach (Task t in tasks)
{
CustomTask objCustomTask = new CustomTask();
objCustomTask.IsTaskCompleted += new EventHandler<CustomEventArgs>(objCustomTask_IsTaskCompleted);
objCustomTask.sortTasks(t.ID, t);
}
}
public class CustomTask
{
public event System.EventHandler<CustomEventArgs> IsTaskCompleted;
CustomEventArgs objCustomEventArgs = new CustomEventArgs();
WorkflowService.WorkflowSoapClient ws = new WorkflowService.WorkflowSoapClient();
public void sortTasks(String id, Task t)
{
objCustomEventArgs.objTask = t;
ws.CookieContainer = Login.cookieJar;
ws.GetWorkflowDataForItemAsync("TaskName");
ws.GetWorkflowDataForItemCompleted += new EventHandler<WorkflowService.GetWorkflowDataForItemCompletedEventArgs>(ws_GetWorkflowDataForItemCompleted);
}
void ws_GetWorkflowDataForItemCompleted(object sender, WorkflowService.GetWorkflowDataForItemCompletedEventArgs e)
{
objCustomEventArgs.IsPendingTask = false;
XElement objxelement = e.Result;
IEnumerable<XElement> objXElementColl = objxelement.Descendants(XName.Get("ActiveWorkflowsData", Constant.strWorkflowList));
foreach (XElement objXElementWorkflowTemplate in objXElementColl)
{
XElement objXElementWorkflows = objXElementWorkflowTemplate.Element(XName.Get("Workflows", Constant.strWorkflowList));
if (objXElementWorkflows != null && objXElementWorkflows.HasElements == false)
{
objCustomEventArgs.IsPendingTask = true;
}
}
IsTaskCompleted(sender, objCustomEventArgs);
}
public List<Task> GetPendingTask()
{
return null;
}
}
我的工作已经完成,但我有一些问题:
我使用的方法会影响应用程序的性能吗?
异步调用是否意味着我们无法实现 3 层架构?
为什么不支持同步调用。