网站建设费计入哪个科目手机可以做软件开发吗

张小明 2026/1/17 7:45:42
网站建设费计入哪个科目,手机可以做软件开发吗,wordpress红包插件,做百度推广需要有网站吗SynchronizationContext 是 .NET 中一个非常重要的抽象类#xff0c;用于在特定线程上下文中调度#xff08;执行#xff09;代码。它在多线程、异步编程、UI 应用#xff08;如 WPF、WinForms#xff09;、ASP.NET 等场景中扮演着“线程调度协调者”的角色。 一、为什么需…SynchronizationContext是 .NET 中一个非常重要的抽象类用于在特定线程上下文中调度执行代码。它在多线程、异步编程、UI 应用如 WPF、WinForms、ASP.NET 等场景中扮演着“线程调度协调者”的角色。一、为什么需要SynchronizationContext在 UI 应用中如 WPF 或 WinFormsUI 控件只能由创建它们的线程即 UI 线程安全访问。如果你从后台线程如Task.Run、ThreadPool直接修改 UI 元素会抛出异常“The calling thread cannot access this object because a different thread owns it.”为了解决这个问题.NET 提供了SynchronizationContext—— 它允许你捕获当前上下文通常是 UI 线程然后在任意线程中将代码“发回”该上下文执行。二、核心概念1.SynchronizationContext.Current表示当前线程的同步上下文。在 UI 线程WPF/WinForms中它是一个特殊实现如DispatcherSynchronizationContext在普通线程池线程或控制台应用中它通常是null或默认的SynchronizationContext不做同步。2. 核心方法方法作用Post(SendOrPostCallback d, object state)异步调度委托到目标上下文不阻塞调用线程Send(SendOrPostCallback d, object state)同步调度委托阻塞直到执行完成⚠️ 实际使用中几乎总是用Post因为Send可能导致死锁尤其在 UI 线程中调用时。三、不同平台下的实现平台SynchronizationContext.Current类型调度机制WPFDispatcherSynchronizationContext通过Dispatcher.BeginInvokeWinFormsWindowsFormsSynchronizationContext通过Control.BeginInvokeASP.NET (经典)AspNetSynchronizationContext保证请求上下文一致性.NET Core / 控制台null或SynchronizationContext默认实现无特殊调度直接在线程池执行四、典型使用场景与示例✅ 场景 1从后台线程更新 WPF UIpublicpartialclassMainWindow:Window{privateSynchronizationContext_uiContext;publicMainWindow(){InitializeComponent();// 在 UI 线程中捕获上下文_uiContextSynchronizationContext.Current;// 非 null是 DispatcherSynchronizationContext}privatevoidStartWorkButton_Click(objectsender,RoutedEventArgse){Task.Run((){// 模拟耗时操作在后台线程Thread.Sleep(2000);// 安全地更新 UI通过 Post 调度回 UI 线程_uiContext.Post(state{StatusTextBlock.Text工作完成;// ✅ 安全},null);});}}如果没有_uiContext.Post直接写StatusTextBlock.Text ...会抛出跨线程异常。✅ 场景 2在 ViewModel 中使用MVVMpublicclassMainViewModel:INotifyPropertyChanged{privatereadonlySynchronizationContext_context;privatestring_status;publicstringStatus{get_status;set{_statusvalue;OnPropertyChanged();}}publicMainViewModel(){// 假设 ViewModel 在 UI 线程创建_contextSynchronizationContext.Current;}publicasyncvoidLoadData(){vardataawaitTask.Run((){Thread.Sleep(1500);return加载成功;});// 虽然 await 通常自动回到 UI 线程但为了保险或在非 async 方法中_context.Post(_Statusdata,null);}publiceventPropertyChangedEventHandlerPropertyChanged;protectedvirtualvoidOnPropertyChanged([CallerMemberName]stringnamenull)PropertyChanged?.Invoke(this,newPropertyChangedEventArgs(name));}✅ 场景 3自定义SynchronizationContext高级你可以继承SynchronizationContext实现自己的调度逻辑例如单元测试中模拟 UI 线程publicclassTestSynchronizationContext:SynchronizationContext{privatereadonlyQueue(SendOrPostCallback callback,objectstate)_queuenew();publicoverridevoidPost(SendOrPostCallbackd,objectstate){_queue.Enqueue((d,state));}publicvoidExecuteAll(){while(_queue.TryDequeue(outvarwork)){work.callback(work.state);}}}// 单元测试中使用[Fact]publicvoidTestCommandUpdatesPropertyOnUIThread(){vartestContextnewTestSynchronizationContext();SynchronizationContext.SetSynchronizationContext(testContext);varvmnewMyViewModel();// 内部会捕获 Currentvm.DoSomethingThatPostsToContext();testContext.ExecuteAll();// 手动执行所有回调Assert.Equal(Expected,vm.Result);}五、与async/await的关系在现代 C# 中async/await会自动捕获并恢复SynchronizationContextprivateasyncvoidButton_Click(objectsender,RoutedEventArgse){// 当前在 UI 线程SynchronizationContext ! nullvarresultawaitTask.Run(()HeavyWork());// 切到线程池// await 自动通过 SynchronizationContext.Post 回到 UI 线程textBox.Textresult;// ✅ 安全无需手动调度}✅ 因此在async方法中通常不需要手动使用SynchronizationContext。❗ 但在以下情况仍需手动处理在非async方法中启动后台任务在库代码中需要兼容各种上下文需要显式控制调度行为。六、常见陷阱与最佳实践问题解决方案在后台线程调用SynchronizationContext.Current得到null必须在 UI 线程提前保存上下文使用Send导致死锁尽量用Post避免在 UI 线程同步等待后台任务忘记检查null使用前判断if (_context ! null) _context.Post(...)过度依赖SynchronizationContext优先使用async/await更简洁安全七、总结关键点说明作用提供跨线程调度到原始上下文如 UI 线程的通用机制核心方法Post异步、Send同步慎用典型用途安全更新 UI、实现线程亲和性、单元测试模拟现代替代async/await自动处理上下文恢复减少手动调度需求设计哲学抽象线程模型使代码与具体 UI 框架解耦一句话理解SynchronizationContext就像一张“返回原始线程的车票”——你在 UI 线程“买票”保存Current之后无论身在哪个线程都能凭票“坐车回去”执行代码。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

怎样进行网站后台管理网站群建设

Gemini API流式响应技术深度解析与实战应用 【免费下载链接】cookbook A collection of guides and examples for the Gemini API. 项目地址: https://gitcode.com/GitHub_Trending/coo/cookbook 在当今AI应用开发领域,响应延迟一直是影响用户体验的关键瓶颈…

张小明 2026/1/9 6:36:20 网站建设

如何提升网站知名度网页设计 大学生代做

CVPR 2025突破:DepthCrafter颠覆视频深度估计,无需相机参数实现电影级3D效果 【免费下载链接】DepthCrafter DepthCrafter是一款开源工具,能为开放世界视频生成时间一致性强、细节丰富的长深度序列,无需相机姿态或光流等额外信息。…

张小明 2026/1/10 7:48:04 网站建设

怎么评价一个网站做的好否重庆 建站 价格

第一章:Open-AutoGLM能装电脑上吗Open-AutoGLM 是一个基于 AutoGLM 架构的开源语言模型项目,旨在提供可本地部署、可定制化的自然语言处理能力。随着本地大模型需求的增长,许多用户关心是否可以将 Open-AutoGLM 安装在个人电脑上运行。答案是…

张小明 2026/1/9 6:40:58 网站建设

大气网站首页德州做网站的公司有哪些

游戏画质优化工具终极指南:智能自适应提升画质体验 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 在追求极致游戏体验…

张小明 2026/1/9 7:05:21 网站建设

建筑工程招标网站什么是交互式网站开发

第一章:Open-AutoGLM电脑版核心功能概览Open-AutoGLM电脑版是一款面向自动化自然语言处理任务的桌面级应用,深度融合了大语言模型推理能力与本地化操作系统的交互优势。该软件支持离线模型加载、多会话管理、自定义提示词模板以及API扩展接口&#xff0c…

张小明 2026/1/9 8:40:45 网站建设