当前位置: 首页 > news >正文

网络公司网站建设彩铃样本网站域名备案授权书

网络公司网站建设彩铃样本,网站域名备案授权书,大连网站建设金豆,微信官方登录入口“ 引言部分#xff0c;总领全篇文章的中心内容。”01—IResult and Coroutines在前面#xff0c;我提到了Actions概念的另一个引人注目的特性#xff0c;称为协同程序。如果你以前没听说过这个词#xff0c;下面是维基百科要说的#xff1a;在计算机科学中#xff0c;协… “ 引言部分总领全篇文章的中心内容。”01—IResult and Coroutines在前面我提到了Actions概念的另一个引人注目的特性称为协同程序。如果你以前没听说过这个词下面是维基百科要说的在计算机科学中协同程序是一种程序组件它泛化子例程以允许多个入口点在某些位置暂停和恢复执行。协同程序非常适合实现更熟悉的程序组件如协作任务、迭代器、无限列表和管道。在计算机科学中协同程序是一种程序组件它泛化子例程以允许多个入口点在某些位置暂停和恢复执行。协同程序非常适合于实现更熟悉的程序组件如协作任务、迭代器、无限列表和管道。这里有一种方法可以解决这个问题想象能够执行一个方法然后在某个语句上暂停它的执行去做其他事情然后返回并在您停止的地方继续执行。这种技术在基于任务的编程中非常强大特别是当这些任务需要异步运行时。例如假设我们有一个ViewModel它需要异步调用一个web服务然后它需要获取该结果对其进行一些处理并异步调用另一个web服务。最后它必须在模式对话框中显示结果并用另一个异步任务响应用户的对话框选择。使用标准的事件驱动异步模型实现这一点并不是一种愉快的体验。然而这是一个使用协同程序来完成的简单任务。问题是……C#没有在本地实现协同路由。幸运的是我们可以某种程度上在迭代器之上构建它们。利用Caliburn.Micro中的这一特性需要两件事首先在某个类上实现IResult接口表示您希望执行的任务其次从Action2生成IResult实例。让我们更具体一些。假设我们有一个Silverlight应用程序我们希望动态下载并显示屏幕而不是主包的一部分。首先我们可能希望显示一个“加载”指示器然后异步下载外部包接下来隐藏“加载”指示器最后导航到动态模块内的特定屏幕。如果您的第一个屏幕希望使用协同程序导航到动态加载的第二个屏幕则代码如下所示using System.Collections.Generic; using System.ComponentModel.Composition;[Export(typeof(ScreenOneViewModel))] public class ScreenOneViewModel {public IEnumerableIResult GoForward(){yield return Loader.Show(Downloading...);yield return new LoadCatalog(Caliburn.Micro.Coroutines.External.xap);yield return Loader.Hide();yield return new ShowScreen(ExternalScreen);} }首先请注意动作“GoForward”的返回类型为IEnumerable。这对于使用协同程序是至关重要的。该方法的主体有四个收益率语句。每个收益都返回一个IResult实例。第一个是显示“下载”指示器的结果第二个是异步下载xap第三个是隐藏“下载”消息第四个是显示下载的xap的新屏幕。在每个yield语句之后编译器将“暂停”此方法的执行直到特定任务完成。第一个、第三个和第四个任务是同步的而第二个是异步的。但是yield语法允许您以顺序方式编写所有代码将原始工作流保留为可读性和声明性更强的结构。要进一步了解其工作原理请查看IResult接口public interface IResult {void Execute(CoroutineExecutionContext context);event EventHandlerResultCompletionEventArgs Completed; }这是一个实现起来相当简单的接口。只需在“Execute”方法中编写代码并确保在完成时引发“Completed”事件无论是同步任务还是异步任务。因为协同路由发生在动作内部所以我们为您提供了一个ActionExecutionContext它在构建与UI相关的IResult实现时非常有用。这允许ViewModel以声明的方式声明其控制视图的意图而无需对视图进行任何引用也无需进行基于交互的单元测试。以下是ActionExecutionContext的外观public class ActionExecutionContext {public ActionMessage Message;public FrameworkElement Source;public object EventArgs;public object Target;public DependencyObject View;public MethodInfo Method;public Funcbool CanExecute;public object this[string key]; }下面是对所有这些属性含义的解释Message导致调用此IResult的原始ActionMessage。Source触发操作执行的框架元素。EventArgs与操作触发器关联的任何事件参数。Target存在实际操作方法的类实例。View与目标关联的视图。MethodMethodInfo指定要在目标实例上调用的方法。CanExecute如果可以调用操作则返回true否则返回false的函数。Key Index存储/检索框架扩展可能使用的任何附加元数据的位置。考虑到这一点我编写了一个naive Loader IResult它搜索VisualTree查找用于显示加载消息的BusyIndicator的第一个实例。以下是实现using System; using System.Windows; using System.Windows.Controls;public class Loader : IResult {readonly string message;readonly bool hide;public Loader(string message){this.message message;}public Loader(bool hide){this.hide hide;}public void Execute(CoroutineExecutionContext context){var view context.View as FrameworkElement;while(view ! null){var busyIndicator view as BusyIndicator;if(busyIndicator ! null){if(!string.IsNullOrEmpty(message))busyIndicator.BusyContent message;busyIndicator.IsBusy !hide;break;}view view.Parent as FrameworkElement;}Completed(this, new ResultCompletionEventArgs());}public event EventHandlerResultCompletionEventArgs Completed delegate { };public static IResult Show(string message null){return new Loader(message);}public static IResult Hide(){return new Loader(true);} }看看我是如何利用上下文的。查看这在保持视图和视图模型之间的分离的同时打开了许多可能性。仅列出使用IResult实现可以做的一些有趣的事情显示消息框、显示基于VM的模式对话框、在用户的鼠标位置显示基于VM的弹出窗口、播放动画、显示文件保存/加载对话框、基于VM属性而非控件将焦点放在特定的UI元素上等。当然最大的机会之一是调用web服务。让我们看看您可能如何做到这一点但通过使用稍微不同的场景动态下载xapusing System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition.ReflectionModel; using System.Linq;public class LoadCatalog : IResult {static readonly Dictionarystring, DeploymentCatalog Catalogs new Dictionarystring, DeploymentCatalog();readonly string uri;[Import]public AggregateCatalog Catalog { get; set; }public LoadCatalog(string relativeUri){uri relativeUri;}public void Execute(CoroutineExecutionContext context){DeploymentCatalog catalog;if(Catalogs.TryGetValue(uri, out catalog))Completed(this, new ResultCompletionEventArgs());else{catalog new DeploymentCatalog(uri);catalog.DownloadCompleted (s, e) {if(e.Error null){Catalogs[uri] catalog;Catalog.Catalogs.Add(catalog);catalog.Parts.Select(part ReflectionModelServices.GetPartType(part).Value.Assembly).Where(assembly !AssemblySource.Instance.Contains(assembly)).Apply(x AssemblySource.Instance.Add(x));}else Loader.Hide().Execute(context);Completed(this, new ResultCompletionEventArgs {Error e.Error,WasCancelled false});};catalog.DownloadAsync();}}public event EventHandlerResultCompletionEventArgs Completed delegate { }; }如果不清楚此样本使用的是MEF。此外我们正在利用为Silverlight 4创建的DeploymentCatalog。您不需要了解很多关于MEF或DeploymentCatalog的知识就可以获得外卖。请注意我们连接DownloadCompleted事件并确保在其处理程序中触发IResult.Completed事件。这就是使异步模式能够工作的原因。我们还确保检查错误并在ResultCompletionEventArgs中传递该错误。说到这里这门课看起来是这样的public class ResultCompletionEventArgs : EventArgs {public Exception Error;public bool WasCancelled; }Caliburn.Micro的枚举器在从每个IResult回调后检查这些属性。如果出现错误或WASCELLENCEL设置为true则停止执行。你可以利用这个优势。假设您为OpenFileDialog创建了一个IResult。您可以检查该对话框的结果如果用户取消了该对话框请在事件参数上设置wascelected。通过执行此操作您可以编写一个动作该动作假定如果执行Dialog.Show后面的代码则用户必须选择了一个文件。这种技术可以简化这种情况下的逻辑。显然如果需要可以对SaveFileDialog或任何确认样式的消息框使用相同的技术。上面显示的LoadCatalog实现中我最喜欢的部分是最初的实现是由CM用户编写的感谢janoveh提交的这篇精彩文章作为旁注我们添加到CM项目站点的内容之一是“配方”部分。在未来几个月内我们将在该领域添加更多类似的通用解决方案。因此它将是一个检查酷插件和框架定制的好地方。您可以做的另一件事是创建一系列围绕应用程序外壳构建的IResult实现。这就是上面使用的ShowScreen结果所做的。以下是它的实施using System; using System.ComponentModel.Composition;public class ShowScreen : IResult {readonly Type screenType;readonly string name;[Import]public IShell Shell { get; set; }public ShowScreen(string name){this.name name;}public ShowScreen(Type screenType){this.screenType screenType;}public void Execute(CoroutineExecutionContext context){var screen !string.IsNullOrEmpty(name)? IoC.Getobject(name): IoC.GetInstance(screenType, null);Shell.ActivateItem(screen);Completed(this, new ResultCompletionEventArgs());}public event EventHandlerResultCompletionEventArgs Completed delegate { };public static ShowScreen OfT(){return new ShowScreen(typeof(T));} }这带来了IResult的另一个重要特性。在CM执行结果之前它会将结果传递给IoC.build方法从而使容器有机会通过属性将依赖项推入。这允许您在视图模型中正常创建它们同时仍然允许它们依赖于应用程序服务。在这种情况下我们依赖于IShell。您还可以注入容器但在本例中我选择在内部使用IoC静态类。一般来说你应该避免直接从容器中取出东西。但是我认为在基础架构代码如ShowScreen IResult内部执行时这是可以接受的。其他用途现成的Caliburn.Micro可以为通过ActionMessage调用的任何操作自动执行协同路由。但是有时您可能希望直接利用协同程序特性。要执行协同程序可以使用静态的coroutine.BeginExecute方法。我希望这能为IResult提供一些解释和创造性的想法。请务必查看随附的示例应用程序。还有其他一些有趣的事情。04—最后原文标题Caliburn.Micro Xaml made easy原文链接https://caliburnmicro.com/documentation/coroutines翻译dotnet编程大全C#技术群 : 添加小编微信mm1552923备注进群
http://www.pierceye.com/news/327851/

相关文章:

  • 临沂网站开发不会写代码怎么做网站
  • 怎么做加密货币网站wordpress 多域名登陆
  • 做网站的过程做网站公司广州
  • 女人动漫做受网站wordpress如何作页面
  • 做网站导航栏素材图建筑设计网站制作
  • 淘宝的网站建设方案国家为何要求所有网站均须备案
  • 企业网站模板下载哪家公司强温州建设公司网站
  • 网站编辑能在家做wordpress 做的商城
  • 空间信息网站开发公司工程项目质量安全管理体系
  • 网站流量被黑包装回收网站建设
  • 网站拒绝被百度收录成品网站1688特色
  • 深圳住房和建设局网站官网打不开WordPress 斗鱼
  • 纯文本网站连接西宁圆井模板我自己做的网站
  • 职业院校专题建设网站wordpress文章版权投诉
  • 网站改版好吗如何解决旅游网站建设问题
  • 爱站网使用的是什么网站模仿网站页面违法吗
  • 做民宿的网站wordpress 短信平台
  • 婚恋网站上认识人 带你做原油交易怎么用手机创造网站
  • 网站建设投标书服务方案范本天津北京网站建设公司
  • 网站建设好评公司微企点建站怎么样
  • 某网站开发项目成本估计推广普通话作文500字
  • 制作网站需要哪些工作网站建设佰金手指科杰十三
  • 外贸哪家做网站wordpress excel搜索
  • 苏州做网站推广的英文搜索网站
  • 政务微网站建设方案深圳市易捷网络科技有限公司
  • 云南网站建设哪家好长沙网站建设营销
  • 四川省建设厅注册中心网站网站管理内容
  • 百度提交网站wordpress广告设置
  • 余姚市城乡建设局网站石家庄上门足疗
  • 深圳工程造价建设信息网站php网站建设题目