wp8的任务队列?在wp8中排队复杂任务的正确方法是什么?任务包括以下内容:通过更新模型变量显示ProgressIndicator获取数据或将数据存储到wcf服务(UploadStringAsync)使用UploadStringCompleted的结果更新基础数据绑定模型。通过更新模型变量隐藏ProgressIndicator目前我一直在使用一个包含命令对象队列的类,运行一个在添加项目时启动的线程(如果它尚未运行)。但是,我遇到等待代码停止运行的任务或子任务的问题。我以前使用过async-await,但是几个级别的行为变得越来越不可预测。我想要的是能够创建和排队命令对象的主线程。命令对象应该一次运行一个,而不是在前一个完全完成之前开始一个新的。如果需要,命令对象应该能够使用调度程序访问主线程。如果你使用异步/等待,你不需要另一个线程(因为你没有CPU绑定处理)。在您的情况下,听起来您只需要一个异步委托队列。异步委托的自然类型是Func(无返回值)或Func>(有返回值)。可悲的是,这个小技巧在这一点上并不为人所知。因此,声明一个异步委托队列:privatereadonlyQueue>queue=newQueue>();然后,您只能(异步)处理队列的单个“顶级”任务:privateTaskqueueProcessor;只要没有更多项目为空,queueProcessor就可以。每当它不为空时,它将表示此方法:尝试{等待命令();}catch(Exceptionex){//排队任务的异常将在这里结束。扔;}}}最后{queueProcessor=null;您的Enqueue方法将如下所示:privatevoidEnqueue(Funccommand){queue.排队(命令);如果(queueProcessor==null)queueProcessor=ProcessQueue();现在,我设置了这样的异常处理:任何抛出异常的排队命令都会导致队列处理器停止处理(具有相同的异常)。这可能不是您应用程序的最佳行为。您可以像这样使用它(当然,使用lambda或实际方法):Enqueue(async()=>{ShowProgressIndicator=true;ModelData=awaitmyProxy.DownloadStringTaskAsync();ShowProgressIndicator=false;});请注意DownloadStringTaskAsync的使用。如果您为EAP成员编写TAP包装器,您的异步代码将更“自然”(即更简单)。这非常复杂,我建议将它放入一个单独的类中,但您首先要决定如何处理(和显示)错误。以上就是C#学习教程:wp8的任务队列?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
