摘要: 1. 纯函数,输入输出相同,即使是耗时cpu密集型的任务,也是纯函数。 但是这种你实际使用的时候大概率需要用 Task Run 来包裹,这样做的目的是用主线程来给用户表示等待的 UI 呈现。 如果不用,那就直接等就好了。 2 Loaded 函数 很多 UI 框架都会有的事件。应该在界面加载完毕后 c 阅读全文
posted @ 2025-04-28 14:12 凌枫玖 阅读(6) 评论(0) 推荐(0)
摘要: 在决定状态放置位置时,可以问自己以下问题:1. 这个状态是否反映了业务逻辑或用户意图? • 如果是,应该放在 ViewModel 中 • 例如:用户是否希望查看菜单(IsMenuShowed)2. 这个状态是否仅与特定 UI 技术实现相关? • 如果是,应该放在 View 中 • 例如:菜单的动画时 阅读全文
posted @ 2025-04-25 15:39 凌枫玖 阅读(10) 评论(0) 推荐(0)
摘要: 已经有不少 csharp markup 语法的仓库 但是他们都不是完全健全的工具,就连 avalonia 本身,winui 这些你也得质疑其稳定性。 但市面上确实有不少开源项目,已经做的很不错了,官方不足的部分只能考开发者自己来补齐。 包括我的 TachiChanNext 也是,因为使用了 Chil 阅读全文
posted @ 2025-04-20 17:46 凌枫玖 阅读(35) 评论(0) 推荐(0)
摘要: 首先分情况,现在肯定都是用 cswin32 来投影源生成 如果只是个测试项目,那直接用随便怎样都好。 如果是个正式项目,那就需要把对 win32 的调用封装在一个类或文件中,并且不对外暴露 HWND 等 cswin32 相关命名空间。 一、约定成熟的调用方案 如 MessageBox.Show(), 阅读全文
posted @ 2025-04-08 15:22 凌枫玖 阅读(25) 评论(0) 推荐(0)
摘要: TODO 阅读全文
posted @ 2025-01-19 09:07 凌枫玖 阅读(6) 评论(0) 推荐(0)
摘要: 在做条件判断时,经常会有判断一个对象是否为空,再去拿里面属性的结构。 xx != null && xx.Prop.Something 如果你的判断条件,或者接下来要做的操作足够简单。记得不要忘记 ?? 运算符的存在。 我们可以直接合并上述情况的判断条件 xx?.Prop.Something ?? d 阅读全文
posted @ 2025-01-16 11:13 凌枫玖 阅读(7) 评论(0) 推荐(0)
摘要: _ = Task.Run(async() => { try { throw new NotImplementException(); await Task.Delay(1); } catch(Exception ex) { Debug.WriteLine(ex); } } fire and forg 阅读全文
posted @ 2025-01-14 18:28 凌枫玖 阅读(71) 评论(0) 推荐(0)
摘要: .ObserveOn(SynchronizationContext.Current) SynchronizationContext.Current 是当前上下文的意思。比如我处于 ui 线程,此时我订阅了一个 Process 的 Exited 事件。 // On ui thread proc.Eve 阅读全文
posted @ 2025-01-11 04:32 凌枫玖 阅读(9) 评论(0) 推荐(0)
摘要: 如果你在开发一个 GUI 程序。 停止在项目中使用 ConfigureAwait(false) 来尝试提高效率。 也不需要 ConfigureAwait.Fody。 .ConfigureAwait(false) 或者默认值为 false,会让你的 viewmodel 和业务逻辑越来越混乱 阅读全文
posted @ 2025-01-10 10:50 凌枫玖 阅读(12) 评论(0) 推荐(0)
摘要: class DummyModel { public string DummyString { get; } = string.Empty; public string[] DummyArray { get; } = []; public Process? DumbProcess { get; } } 阅读全文
posted @ 2025-01-09 20:39 凌枫玖 阅读(6) 评论(0) 推荐(0)