摘要: 同步构造 当线程 A 在等待一个同步构造,另一个线程 B 持有构造一直不释放,那么就会导致线程 A 阻塞。同步构造有用户模式构造和内核模式构造。 用户模式构造通过 CPU 指令来协调线程,所以速度很快。也意味着不受操作系统控制,所以等待构造的线程会不停自旋,浪费 CPU 时间。 内核模式构造通过操作 阅读全文
posted @ 2023-02-02 17:56 鹅群中的鸭霸 阅读(453) 评论(0) 推荐(5) 编辑
摘要: 进程和线程 不同程序执行需要进行调度和独立的内存空间 在单核计算机中,CPU 是独占的,内存是共享的,这时候运行一个程序的时候是没有问题。但是运行多个程序的时候,为了不发生一个程序霸占整个 CPU 不释放的情况(如一个程序死循环无法结束了,那么其他程序就没有机会运行了),就需要开发者给不同程序划分不 阅读全文
posted @ 2023-01-31 12:11 鹅群中的鸭霸 阅读(566) 评论(0) 推荐(7) 编辑
摘要: WPF 客户端经常需要运行在各种不同大小屏幕下,为了显示友好,所以开发的时候都需要考虑响应式设计。 布局往往通过指定比例,而不直接指定准确的大小来实现响应式布局(如 Width="3*" ),但是具体控件的大小(如 Thickness、CornerRadius)就没有开箱即用的响应式功能了,用 vi 阅读全文
posted @ 2022-03-12 17:15 鹅群中的鸭霸 阅读(537) 评论(3) 推荐(5) 编辑
摘要: 众所周知, WPF 的 UI 渲染是单线程的,所以如果我们异步或者新建线程去进行数据处理的时候,处理完,想要更新 UI 的时候,需要调用一下 Dispatcher.Invoke,将处理完的数据推入到 Dispatcher 中,等待更新界面,不然就会报调用线程无法访问此对象,因为另一个线程拥有该对象的 阅读全文
posted @ 2022-03-04 18:44 鹅群中的鸭霸 阅读(2227) 评论(6) 推荐(5) 编辑
摘要: 随着业务越来越复杂,最近决定把一些频繁查询但是数据不会怎么变更的接口做一下缓存,这种功能一般用 AOP 就能实现了,找了一下客户端又没现成的直接可以用,嗐,就只能自己开发了。 代理模式和AOP 理解代理模式后,对 AOP 自然就手到擒来,所以先来点前置知识。 代理模式是一种使用一个类来控制另一个类方 阅读全文
posted @ 2022-03-01 17:38 鹅群中的鸭霸 阅读(1358) 评论(4) 推荐(4) 编辑
摘要: 使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库。结果找了一大圈,发现不是版本不支持,就是收费。 嗐!还能咋办,只能自己搞一个 PDF 生成控件咯。 环境准备 WPF + WebView2 + 阅读全文
posted @ 2022-02-25 18:59 鹅群中的鸭霸 阅读(1365) 评论(1) 推荐(6) 编辑
摘要: 当 WPF 客户端需要实现插件系统的时候,一般可以基于容器或者进程来实现。如果需要对外部插件实现异常隔离,那么只能使用子进程来加载插件,这样插件如果抛出异常,也不会影响到主进程。WPF 元素无法跨进程传输,但是窗口句柄(HWND)可以,所以可以将 WPF 元素包装成 HWND,然后通过进程间通信将插 阅读全文
posted @ 2021-09-17 18:40 鹅群中的鸭霸 阅读(1132) 评论(19) 推荐(10) 编辑