05 2020 档案

摘要:标记扩展其实就是MarkupExtension类的直接或间接派生类。 x命名空间中就包含一些这样的类,也被称为x命名空间内的标记扩展。 1、x:Type 其值是一个数据类型的名称,一般情况下,编程中操作的嗾使数据类型的实例或实例的引用,但有时也会用到数据类型本身。Type包含在.Net Framew 阅读全文
posted @ 2020-05-30 09:56 NicolasLiaoRan 阅读(268) 评论(0) 推荐(0)
摘要:基本上只要是包含了xaml代码的WPF程序都需要通过语句: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"来引入http://schemas.microsoft.com/winfx/2006/xaml 这个命名空间。 显然,这个命名空间所 阅读全文
posted @ 2020-05-29 16:18 NicolasLiaoRan 阅读(202) 评论(0) 推荐(0)
摘要:当一个XAML标签对应一个对象时,这个标签的一部分Attribute会对应这个对象的Property。除了这部分对应着对象Property的Attribute外,还有一部分Attribute对应着这个对象的事件Event。<Button>标签有一个名为Click的Attribute,就对应Butto 阅读全文
posted @ 2020-05-29 15:13 NicolasLiaoRan 阅读(315) 评论(0) 推荐(0)
摘要:XAML使用树形结构来描述UI。 一、为对象属性赋值 XAML是一种声明性语言,XAML编译器会为每个标签创建一个与之对应的对象,注意是对象。对象创建后要对它的属性进行必要的初始化后才会有意义。因为XAML语言不能编写程序的运行逻辑,所以一份XAML文档中除了使用标签声明对象外就是初始化对象的属性。 阅读全文
posted @ 2020-05-29 14:33 NicolasLiaoRan 阅读(248) 评论(0) 推荐(0)
摘要:起因:本来我的主业是ASP.NET MVC/ASP.NET WebAPI(现在主要是ASP.NET Core方向)以及前端,今年来新单位后接触了下工作,虽然后期也会以Core为核心,但一开始的任务还是有涉及WPF开发,遂开一个栏目简单的记录下自己WPF的学习记录和经验。 WPF目前已经被引入了Cor 阅读全文
posted @ 2020-05-28 21:32 NicolasLiaoRan 阅读(201) 评论(0) 推荐(0)
摘要:每一个新建的WPF程序,核心部分包括: 1、Properties:程序会用到的一些资源(图标、图片、静态字符串)和配置信息 2、引用:标记当前项目需要引用哪些其他项目。 3、App.xaml:程序主体,App.xaml文件用于声明程序进程会是谁,同时指定程序主窗体是谁。 4、MainWindow.x 阅读全文
posted @ 2020-05-28 21:29 NicolasLiaoRan 阅读(129) 评论(0) 推荐(0)
摘要:特性(attribute)是一种允许我们想程序的程序集增加元数据的语言结构。它是用于保存程序结构信息的某种特殊类型的类。 将应用了特性的程序结构叫做目标(target)。 设计用来获取和使用元数据的程序叫做特性的消费者(consumer)。 .Net预定了很多特性,我们也可以声明自定义特性。 开发人 阅读全文
posted @ 2020-05-27 09:46 NicolasLiaoRan 阅读(207) 评论(0) 推荐(0)
摘要:大多数程序都要处理数据,包括读、写、操作和显示数据,但对于某些程序而言它们操作的数据不是数字、文字或图形,而是程序和程序类本身的信息。 1、有关程序和其类型的数据被称为元数据,它们保存在程序的程序集中。 2、程序在运行时,可以查看其它程序集或自身的元数据。一个运行的程序查看本身的元数据或其他程序的元 阅读全文
posted @ 2020-05-26 18:56 NicolasLiaoRan 阅读(191) 评论(0) 推荐(0)
摘要:不同于等待直到结束和轮询,回调模式下一但初始线程发起了异步方法,就自己管自己了,不再考虑同步。当异步方法调用结束后,系统调用一个用户自定义的方法来处理结果,并且调用委托的EndInvoke方法。这个用户自定义的方法就是回调方法。 BeginInvoke的最后两个参数由回调函数使用。 1、最后两个中的 阅读全文
posted @ 2020-05-26 10:47 NicolasLiaoRan 阅读(502) 评论(0) 推荐(0)
摘要:在轮询模式中,原始线程发起了异步方法的调用,做一些其他处理,然后使用IAsyncResult对象的IsComplete属性来定期检查开启的线程是否完成。如果异步方法已经完成,原始线程就调用EndInvoke并继续。否则,做一些其他处理,然后过一会儿再检查。 BeginInvoke返回一个IAsync 阅读全文
posted @ 2020-05-26 09:16 NicolasLiaoRan 阅读(1839) 评论(0) 推荐(0)
摘要:最常用的异步是使用async/await特性和BackgroundWorker类,或者parallel并行库,但也可能会使用旧的模式来产生异步代码。 对于委托,当委托调用对象时,它调用了它的调用列表中包含的方法,这是同步完成的。 而如果委托对象在调用列表中只有一个方法(引用方法),它就可以异步执行这 阅读全文
posted @ 2020-05-25 19:32 NicolasLiaoRan 阅读(1283) 评论(0) 推荐(0)
摘要:有些时候,会需要另建一个线程,这个线程在后台持续运行以完成某项工作,并不时地与主线程进行通信。BackgroundWorker类就用于此目的。 BackgroundWorker类包括 4个属性: 1、WorkerReportsProgress 2、WorkerSupportsCancellation 阅读全文
posted @ 2020-05-25 13:51 NicolasLiaoRan 阅读(600) 评论(0) 推荐(0)
摘要:MainWindow.xaml.cs public partial class MainWindow : Window { //CancellationTokenSource用于创建可分配给不同任务的CancellationToken对象。任何持有CancellationTokenSource的对象 阅读全文
posted @ 2020-05-25 10:47 NicolasLiaoRan 阅读(316) 评论(0) 推荐(0)
摘要:Task.Yield方法创建一个立即返回的awaitable。等待一个yield可以让人异步方法在执行后续部分的同时返回到调用方法。相当于离开当前的消息队列,回到队列末尾,让处理器有时间处理其他任务。 static class DoStuff { public static async Task<i 阅读全文
posted @ 2020-05-25 09:07 NicolasLiaoRan 阅读(1041) 评论(0) 推荐(0)
摘要:实际上异步方法在GUI程序中尤为有用,GUI程序在设计上就要求所有的现实变化都必须在GUI主线程上完成,比如点击按钮,展示标签,移动窗体等。Windows程序通过消息来实现这一点,消息会被放入由消息泵管理的消息队列中。 消息泵从消息队列中取出一条信息,并调用它的处理程序(handler)代码。当处理 阅读全文
posted @ 2020-05-22 20:13 NicolasLiaoRan 阅读(422) 评论(0) 推荐(0)
摘要:Task.Delay方法创建一个Task对象,该对象将暂停其在线程中的处理,并在一定时间之后完成。但与Thread.Sleep阻塞线程不同的是,Task.Delay不会阻塞线程,线程可以继续处理其他工作。 class Simple { Stopwatch sw = new Stopwatch(); 阅读全文
posted @ 2020-05-22 19:04 NicolasLiaoRan 阅读(198) 评论(0) 推荐(0)
摘要:一、在调用方法中同步地等待任务 static class MyDownloadString { public static void DoRun() { Task<int> t = CountCharactersAsync("https://www.baidu.com"); //t.Wait(); 阅读全文
posted @ 2020-05-22 18:44 NicolasLiaoRan 阅读(421) 评论(0) 推荐(0)
摘要:异步方法的结构包含有3个不同的区域: async Task<int> CountCharactersAsync(int id,string site) { //section 1 第一个await表达式之前的部分 Console.WriteLine("Starting CounCharacters" 阅读全文
posted @ 2020-05-22 16:44 NicolasLiaoRan 阅读(423) 评论(1) 推荐(0)
摘要:同步:如果一个程序调用了某个方法,等待其执行所有处理后才继续执行下一步,就被称为同步。 异步:异步方法在处理完成之前就会返回到调用方法,async/await特性可以创建并调用异步方法。 async/await特性由3个部分组成: 1、调用方法:该方法调用异步方法,然后在异步方法(可能在相同线程,也 阅读全文
posted @ 2020-05-22 16:39 NicolasLiaoRan 阅读(279) 评论(0) 推荐(0)
摘要:同步版本示例: namespace SyncSample { class MyDownloadString { Stopwatch sw = new Stopwatch(); public void DoRun() { const int LargeNumber = 6000000; sw.Star 阅读全文
posted @ 2020-05-22 16:32 NicolasLiaoRan 阅读(537) 评论(0) 推荐(0)
摘要:一、取消异步执行 可以在异步方法中允许请求终止执行。 class MyClass { public async Task RunAsync(CancellationToken ct) { if (ct.IsCancellationRequested) return; await Task.Run(( 阅读全文
posted @ 2020-05-22 16:25 NicolasLiaoRan 阅读(534) 评论(0) 推荐(0)