walterlv的专栏

热爱设计,不止是程序,更是艺术!

WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制

无论是 WPF 还是 UWP 开发,如果用 Storyboard 和 Animation 做动画,我们多数时候都会设置 From 和 To 属性,用于从起始值动画到目标值。然而动画并不总是可以静态地指定这些值,因为更多的时候动画的起始值和目标值取决于当前 UI 的状态。本文中,我将将尽量避免设置 ...

2017-10-31 16:19:13

阅读数:673

评论数:0

WPF 同一窗口内的多线程 UI(VisualTarget)

WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验。如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程。然而,就不能让同一个窗口内部使用多个 UI 线程吗?答案其实是——可以的!使用 VisualTarget 即可。

2017-10-30 23:55:26

阅读数:467

评论数:0

如何实现一个可以用 await 异步等待的 Awaiter

.NET 和 C# 共同给我们带来的 async/await 异步编程模型(TAP)用起来真的很爽。为了实现异步等待,我们只需要在一切能够能够异步等待的方法前面加上 await 即可。能够异步等待的最常见的类型莫过于 Task,但也有一些其他类型。即便有些耗时操作没有返回可等待的类型,我们也可以用...

2017-10-29 20:41:48

阅读数:3247

评论数:7

使用 Task.Wait()?立刻死锁(deadlock)

最近读到一篇异步转同步的文章,发现其中没有考虑到异步转同步过程中发生的死锁问题,所以特地在本文说说异步转同步过程中的死锁问题。 文章作者 林德熙 已经修复了描述: - win10 uwp 异步转同步 什么情况下会产生死锁? 调用 Task.Wait() 或者 Task.Resu...

2017-10-27 23:59:35

阅读数:2062

评论数:0

使用 ExceptionDispatchInfo 捕捉并重新抛出异常

当你跑起了一个异步线程,并用 await 异步等待时,有没有好奇为什么能够在主线程 catch 到异步线程的异常?当你希望在代码中提前收集好异常,最后一并把收集到的异常抛出的时候,能不能做到就像在原始异常发生的地方抛出一样?本文介绍 ExceptionDispatchInfo,专门用于重新抛出异常...

2017-10-23 22:33:03

阅读数:436

评论数:0

CaptureMouse/CaptureStylus 可能会失败

在 WPF 中,如果我们要做拖动效果,通常会调用一下 CaptureMouse/CaptureStylus 以便当鼠标或手指离开控件的时候依然能够响应 Move 和 Up 事件。不知有没有注意到这两个函数其实是有 bool 返回值的?——是的,它们可能会失败。在调试一个项目代码的时候,我就发现了这...

2017-10-21 16:35:54

阅读数:544

评论数:0

如何防止后台线程抛出的异常让程序崩溃退出

如果你的程序抛了异常,你是怎么处理的呢?等待程序崩溃退出?还是进行补救?如果是做 UI 开发,很容易就找到 Dispatcher.UnhandledException 事件,然后在事件中进行补救。如果补救成功,可以设置 e.Handled = true 来阻止异常继续让程序崩溃退出。但是,如果是后...

2017-10-21 16:32:06

阅读数:973

评论数:0

出让执行权:Task.Yield, Dispathcer.Yield

Yield 这个词很有意思,叫做“屈服”“放弃”“让步”,字面意义上是让出当前任务的执行权,转而让其他任务可以插入执行。Task、Dispatcher、Thread 都有 Yield() 方法,看起来都可以让出当前任务的执行权。如果在阅读中发现对本文涉及到的一些概念不太明白,可以阅读: 深入了解 ...

2017-10-21 16:30:16

阅读数:539

评论数:0

如何组织一个同时面向 UWP/WPF/.Net Core 控制台的 C# 项目解决方案

希望写一个小型工具,给自己和需要的人。考虑到代码尽可能的复用,我准备采用 .Net Standard 来编写大多数核心代码,并基于 .Net Core 编写跨平台控制台入口,用 WPF 编写桌面端 UI 入口,用 UWP 作为可上架商店的 UI 入口,然后用 Shared Project 共享 W...

2017-10-21 16:26:55

阅读数:1765

评论数:1

DependencyProperty.UnsetValue 的正确打开方式

无论是 WPF,还是 UWP,只要你用了绑定或者标记扩展,一定会碰到一个神奇的值——DependencyProperty.UnsetValue。UnsetValue 是什么意思?为什么会出现这个值呢?如果要让 UnsetValue 为我们所用,正确的用法又是什么呢?DependencyProper...

2017-10-11 00:05:34

阅读数:905

评论数:0

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