自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

singhwong

c#,uwp

  • 博客(21)
  • 收藏
  • 关注

原创 三、创建库

可以通过创建库来使用共享代码。在Visual Studio 2017中,有许多创建库的选项,如下所示:Class Library (.NET Core) Class Library (.NET Standard) Class Library (.NET Framework) WPF Custom Control Library (.NET Framework) WPF User Con...

2020-01-21 00:48:50 765

原创 二、程序集

程序集是包含额外元数据的库或可执行文件。使用.NET Core,包含Main()方法的应用程序会创建为具有文件扩展名.dll的库。这个DLL需要一个宿主来加载这个库,为此可以使用dotnet run,或者在运行库环境中使用dotnet。使用.NET Core创建独立的应用程序时,会为每个平台创建不同的可执行文件来加载库。下面看看一个简单的"Hello,World!"控制台应用程序,它使用如下命...

2020-01-20 06:38:13 169

原创 一、库的地狱

库可以在多个应用程序中重用代码。在Windows中,库有很长的历史,而构建原则通过更新的技术走向了不同的方向。在.NET之前,动态链接库(Dynamic Link Library,DLL)可以在不同的应用程序之间共享。这些DLL已安装在共享目录中。这些库在同一个系统上不可能有多个版本,但它们应该是向上兼容的。当然,情况并非总是如此。此外,应用程序的安装也存在一些问题,例如没有关注指导方针,用旧版本...

2020-01-20 05:24:04 212

原创 绑定快捷键

下面记录下在UPW项目中,轻松实现绑定快捷键的代码块。 protected override void OnNavigatedTo(NavigationEventArgs e) { Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown; } pri...

2020-01-19 22:38:33 312

原创 异步与Windows应用程序

把async关键字用于UWP应用程序与本章前面的相同。但需要注意,在UI线程中调用await之后,当异步方法返回时,将默认返回到UI线程中。这便于在异步方法完成后更新UI元素。注:为了创建UWP应用程序,需要Windows 10,Windows系统必须在"开发人员模式"下配置。启用"开发人员模式"时,需要打开Windows设置,选择Update & Security磁贴,选择For d...

2020-01-17 03:37:44 224

原创 错误处理

在使用异步方法时,应该知道错误的一些特殊处理方式。所有示例的代码都使用了如下名称空间:SystemSystem.Threading.Tasks从一个简单的方法开始,它在延迟后抛出一个异常: async static Task ThrowAfter(int ms,string message) { await Task.Dela...

2020-01-16 23:23:31 213

原创 异步编程的基础

async和await关键字只是编译器功能。编译器会用Task类创建代码。如果不使用这两个关键字,也可以用C# 4.0和Task类的方法来实现同样的功能,只是没有那么方便。本节介绍了编译器用async和await关键字能做什么,如何采用简单的方式创建异步方法,如何并行调用多个异步方法,以及如何修改已经实现异步模式的类,以使用新的关键字。所有Foundations的示例代码都使用了如下名称空...

2020-01-16 04:36:34 204

原创 光标样式枚举

Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Hand, 1);可以枚举内置的好几种鼠标光标样式。

2020-01-13 17:32:31 145

原创 自定义窗口尺寸

自己的一个项目,视频播放器,最近增加了窗口尺寸适应视频尺寸的功能。在这里简单记录下,以便往后查阅。//获取视频文件的帧宽度和帧高度var temporary_videoProperties = await file.Properties.GetVideoPropertiesAsync();Video_Height = temporary_videoProperties.Height;...

2020-01-12 23:39:03 476

原创 异步编程的.NET历史

在学习新的async和await关键字之前,先看看.NET Framework的异步模式。从.NET Framework 1.0开始就提供了异步特性,而且.NET Framework的许多类都实现了一个或这多个异步模式。下面开始执行同步网络调用,然后介绍不同的异步模式:异步模式 基于事件的异步模式 基于任务的异步模式异步模式是处理异步特性的第一种方式,它不仅可以使用几个API,还可...

2020-01-12 00:50:50 157

原创 异步编程的重要性

.NET Framework 4.5将任务并行库(Task Para uel Library,TPL)添加到.NET中,以使并行编程更容易。C# 5.0增加了两个关键字来简化异步编程:async和await。这两个关键字将是本章的重点。使用异步编程,方法调用是在后台运行(通常在线程或任务的帮助下),并且不会阻塞调用线程。本章将学习3种不同模式的异步编程:异步模式、基于事件的异步模式和基于任...

2020-01-11 22:07:43 546

原创 用户定义的异常类

上一节创建了一个用户定义的异常。下面介绍有关异常的第二个示例,这个示例称为SolicitColdCall,它包含两个嵌套的try块,说明了如何定义自定义异常类,再从try块中抛出另一个异常。这个示例假定一家销售公司希望有更多的客户。该公司的销售部门打算给一些人打电话,希望他们成为自己的客户。用销售行业的行话来讲,就是“陌生电话”(cold-calling)。为此,应有一个文本文件存储这些陌生人...

2020-01-11 00:39:07 513

原创 捕获异常

.NET提供了大量的预定义基类异常对象,本节介绍如何在代码中使用它们捕获错误情况。为了在C#代码中处理可能的错误情况,一般要把程序的相关部分分成3种不同类型的代码块:try块包含的代码组成了程序的正常操作部分,但这部分程序可能遇到某些严重的错误。 catch块包含的代码处理各种错误情况,这些错误是执行tyr块中的代码时遇到的。这个块还可以用于记录错误。 finally块包含的代码清理资源或...

2020-01-10 01:51:05 633

原创 错误和异常概述

简介错误的出现并不总是编写应用程序的人的原因,有时应用程序会因为应用程序的最终用户引发的动作或运行代码的环境而发生的错误。无论如何,我们都应预测应用程序中出现的错误,并相应地进行编码。.NET Framework改进了处理错误的方式。C#处理错误的机制可以为每种错误提供自定义处理方式,并把识别错误的代码与处理错误的代码分离开来。无论编码技术有多好,程序都必须能处理可能出现的任何错误。例...

2020-01-08 22:01:27 201

原创 模式匹配

从面向对象的观点来看,最好总是使用具体的类型和接口来解决问题。然而,通常这并不容易做到。在数据库中,查询可能会给出与任何层次结构都无关的不同对象类型。访问API服务时,可以返回一个列表或对象,或者可能什么也不返回。因此,方法通常应该与不同的类型一起工作。这就是模式匹配可以提供帮助的地方。例如,下面创建了一个不同对象的数组。在这个名为data的数组中,第一个元素是null,其后是值为42的整数、...

2020-01-08 02:04:36 1503

原创 元组

元组能够组合不同类型的对象。使用数组可以组合相同类型的对象,而元组允许使用类型的不同组合。元组有助于减少以下两个需求:定义自定义类或结构,以返回多个值 定义参数,从方法中返回多个值自从.NET Framework 4.0版本以来,元组就以泛型Tuple类的形式存在。然而,它们并没有得到广泛使用,因为元组的不同对象可以通过Item1、Item2、Item3等属性访问,这既不吸引人,也没有提...

2020-01-07 23:59:54 1421

原创 本地函数

C# 7的一个新特性是本地函数:方法可以在方法中声明。本地函数在方法的作用域、属性访问器、构造函数或者lambda表达式内声明。本地函数只能在包含成员的作用域内调用。可以使用本地函数,而不是使用仅一个地方需要的私有方法。下面是一个示例,且在没有本地函数的情况下启动——lambda表达式将在下一个回合中由本地函数替换。下面的代码片段声明了分配给委托变量add的lambda表达式。变量add是在方...

2020-01-04 16:15:12 908

原创 using static 声明

许多实际的扩展可以通过扩展方法来实现,比如前面的Use扩展方法或前面介绍的用于LINQ的许多扩展方法。在本书后面的许多章节中还将介绍.NET提供的许多扩展方法。并非所有实际的扩展都有可以扩展的类型。对于某些场景,简单的静态方法比较适合。为了更容易调用这些方法,可以使用using static声明除去类名。例如,如果打开了System.Consoleusing static Syst...

2020-01-02 16:38:03 302

原创 扩展方法

扩展方法之前已经讨论过了,但是,由于扩展方法对函数式编程概念有很大的帮助,因此这里展示另一个例子。在函数式编程中,许多方法都非常短,只包含单个语句,而前面所示的表达式体成员有助于减少代码行数。例如,可以将using语句改为方法。下面的扩展方法名为Use,它是所有实现IDisposable接口的类的扩展方法。using语句在实现中使用,以在使用后释放该项。对于该项的用户,可以将Action&lt...

2020-01-01 19:35:00 103

原创 表达式体的成员

C# 6允许表达式体成员的方法和属性只定义get访问器,而在C# 7中,只要在实现代码中只使用一条语句,表达式体成员就可以在任何地方使用。在函数式编程中,许多方法都只是一行代码,因此可以经常使用这个特性,代码行数减少,是因为不需要花括号。看看下面的代码片段,其中,表达式体成员与属性访问器(get和set)一起使用,并使用ToString()方法的实现,以及构造函数的实现。构造函数定义为接受na...

2020-01-01 18:32:50 354

原创 概述

C#从来都不是纯面向对象的编程语言。从一开始,C#就是面向组件的编程语言。面向组件是什么意思?C#提供了面向对象编程语言也在使用的继承和多态性;此外,它还通过特性提供对属性、事件和注释的本机支持。随后带有LINQ和表达式的版本也包括了声明性编程。使用声明式LINQ表达式,编译器会保存一个表达式树,该表达式树稍后由提供程序用于动态生成SQL语句。C#并不仅仅是单一的编程语言范例。相反,目前使用C...

2020-01-01 01:49:13 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除