当前位置: 首页> 文旅> 文化 > 学编程入门_游戏网站搭建需要多少钱_seo关键词优化软件官网_什么是营销

学编程入门_游戏网站搭建需要多少钱_seo关键词优化软件官网_什么是营销

时间:2025/7/9 6:37:18来源:https://blog.csdn.net/qq_3517289697/article/details/144930500 浏览次数:0次
学编程入门_游戏网站搭建需要多少钱_seo关键词优化软件官网_什么是营销

(SynchronizationContext)同步上下文的作用

  • SynchronizationContext 顾名思义是同步上下文的意思。利用此对象可以实现线程间数据的同步、异步访问 ,其实就是实现线程之间通讯的。
  • SynchronizationContext(同步上下文),是一个抽象类,它表示线程上下文,用于协调异步方法(或代理线程)的回调。
  • 使用同步上下文可以使得异步方法(或代理线程)的回调在正确的线程上下文中进行,这样可以避免由于线程上下文切换引发的问题,同时可以更好地掌控异步操作的生命周期。
  • 其实,同步上下文是一种编程模型,它允许多个线程之间的协作,使得程序员可以更加轻松地编写异步代码。

线程教程:C#之多线程-CSDN博客

异步教程:C#——异步Task详情_c# task 异步-CSDN博客

构造函数

SynchronizationContext() 创建 SynchronizationContext 类的新实例。

属性

Current    获取当前线程的同步上下文。

方法

CreateCopy()    在派生类中重写时,创建同步上下文的副本。
Equals(Object)  确定指定对象是否等于当前对象。
(继承自 Object)  GetHashCode()    作为默认哈希函数。
(继承自 Object) GetType()    获取当前实例的 Type。
(继承自 Object) IsWaitNotificationRequired()  确定是否需要等待通知。
 MemberwiseClone()    创建当前 Object 的浅表副本。
(继承自 Object) OperationCompleted()    在派生类中重写时,响应操作已完成的通知。
OperationStarted()    在派生类中重写时,响应操作已开始的通知。
Post(SendOrPostCallback, Object)    在派生类中重写时,将异步消息分派到同步上下文。
Send(SendOrPostCallback, Object)    在派生类中重写时,将同步消息分派到同步上下文。
SetSynchronizationContext(SynchronizationContext)    设置当前同步上下文。
SetWaitNotificationRequired()    

设置指示需要等待通知的通知,并准备回调方法

以使其在发生等待时可以更可靠地被调用。

ToString()    返回表示当前对象的字符串。
(继承自 Object) Wait(IntPtr[], Boolean, Int32)    等待指定数组中的任一元素或所有元素接收信号。
WaitHelper(IntPtr[], Boolean, Int32)    

用于等待指定数组中的任一元素或所有元素接收信

号的 Helper 函数。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard  1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP  10.0

  

创建(SynchronizationContext)同步上下文的方法

  • (1)直接new创建一个SynchronizationContext同步上下文对象。
  • (2)winform程序通过SynchronizationContext.Current获取UI线程的同步上下文对象。
  • (3)AsyncOperation和AsyncOperationManager类来操作同步上下文对象,不直接访问同步上下文对象(SynchronizationContext),推荐这程方法。

(SynchronizationContext)同步上下文的Send和Post方法

  • (1)Send方法就是同步调用,在当前线程上调用委托。
  • (2)Post方法就是异步调用,在线程池中的线程调用委托


 

示例:

使用post方法从将分线程数据传输到主线程

class Program{static Thread _workThread;static SynchronizationContext _mainThreadSynContext;static int Val = 0; static void Main(string[] args){_mainThreadSynContext = SynchronizationContext.Current;if (_mainThreadSynContext == null){_mainThreadSynContext = new SynchronizationContext();}_workThread = new Thread(new ThreadStart(DoWork));_workThread.Start();Console.ReadLine();}static void DoWork(){int a = 10;_mainThreadSynContext.Post(new SendOrPostCallback(ThreadCallBack),a);}static void ThreadCallBack(object state){Val = (int)state;Console.WriteLine(Vale);  // 10Console.ReadLine();}}

SynchronizationContext 的注意事项

  • 上下文切换:在某些情况下,你可能需要在不同的上下文之间切换。例如,从非 UI 线程切换回 UI 线程以更新界面。
  • 性能考虑:频繁地在上下文之间切换可能会带来性能开销,因此在设计时应尽量减少不必要的上下文切换。
  • 手动上下文管理:如果你需要更细粒度地控制上下文,可以实现自己的SynchronizationContext 类,并覆盖其方法。

  


借鉴网站:

C# 异步编程中的 SynchronizationContext:掌握上下文同步的艺术_c# synchronizationcontext-CSDN博客

SynchronizationContext 类 (System.Threading) | Microsoft Learn

完事!!!
 
 

关键字:学编程入门_游戏网站搭建需要多少钱_seo关键词优化软件官网_什么是营销

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: