奇妙的SynchronizationContext

上一篇中已经讲了SynchronizationContext 的一些内容,现在让我们更加深入地去了解它!

继上篇中的问题"在UI线程上对SynchronizationContext的使用,可以适用于其他线程呢?"

OK,我们把它放置在非UI线程上,这是你用SynchronizationContext.Current的属性来获取,你会发 现你得到的是null,这时候,你可能会说,既然它不存在,那么我自己创建一个SynchronizationContext 对象,这样就没问题了吧!?可是,最后它并不会像UI线程中那样去工作。

让我们看下面的例子:

class Program
{
    private static SynchronizationContext mT1 = null;
    static void Main(string[] args)
    {
        // log the thread id
        int id = Thread.CurrentThread.ManagedThreadId;
        Console.WriteLine("Main thread is " + id);
        // create a sync context for this thread
        var context = new SynchronizationContext();
        // set this context for this thread.
        SynchronizationContext.SetSynchronizationContext(context);
        // create a thread, and pass it the main sync context.
        Thread t1 = new Thread(new ParameterizedThreadStart(Run1));
        t1.Start(SynchronizationContext.Current);
        Console.ReadLine();
    }
    static private void Run1(object state)
    {
        int id = Thread.CurrentThread.ManagedThreadId;
        Console.WriteLine("Run1 Thread ID: " + id);
        // grab  the sync context that main has set
        var context = state as SynchronizationContext;
        // call the sync context of main, expecting
        // the following code to run on the main thread
        // but it will not.
        context.Send(DoWork, null);
        while (true)
            Thread.Sleep(10000000);
    }
    static void DoWork(object state)
    {
        int id = Thread.CurrentThread.ManagedThreadId;
        Console.WriteLine("DoWork Thread ID:" + id);
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, static
, thread
, context
console
synchronization、undo synchronization、no synchronization、beam synchronization、synchronization 缩写,以便于您获取更多的相关知识。

时间: 2024-11-02 02:46:26

奇妙的SynchronizationContext的相关文章

奇妙广告认知之旅——先发制人

商业化的今天,广告充斥着我们的生活.在互联网世界,也同样充斥着各种广告,其中最为流行的当属banner广告条. 心理学有云,人类发展与外界刺激息息相关,人的大脑时刻都在对进入认知领域的刺激做出反应,而广告作为刺激的一种,也不例外.本文便是从心理学角度对广告进行剖析,通过分析广告在受众心理层面所产生的影响,提出建议:制定什么样的广告.采取怎样的表现手法,既能够达到广告主预期的效果,又能符合受众审美标准,顺应认知流畅性与提升受众体验. 按照人类心理认知的流程,对刺激物--广告的认知,包括以下步骤:首

奇妙的.NET之Web程序中使用windows弹出框

web|window|程序 有一次做项目时,我突然发现了一个有趣的调用,在.net的WEB程序中,可以使用window包里的系统弹出框,运行时可以在服务器上弹出提示框,如果服务器端点击了弹出框的按钮,客户端IE才能继续运行,否则看上去的现象就象服务器的代码中有无限循环,始终运行一样.例子如下: if (MessageBox.Show("确定要删除?", "提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamati

奇妙的视觉体验 26个优秀的大胆设计风格网站

好的创意可以给人印象深刻'耳目一新的感受,好的网站布局和好的创意设计同时在一个页面中实现,可以想象会给用户带来多么奇妙的视觉体验和操作乐趣,这26个优秀的创意网站大胆的设计风格,在同类网站中表现的出类拔萃,相信你也可以从中收获很多异于平常的理念. 1. 2 am media 2. Chrome bags store 3. Club juicy 4. Elan Chicas 5. England Squash 6. Flash n' Seo

C#中奇妙的操作符重载

C#中奇妙的操作符重载 细心的朋友可能发现,C#虽然可以重载操作符,但和C++比较起来,却有很大的不同.定义的时候重载操作符方法必须是static,而且至少有一个参数(一目和二目分别是一个和两个),C#和C++比起来,最重要的特征是:<.>:==.!=:true.false必须成对出现,即重载了"<"就必须重载">",重载了"=="就必须重载"!=",重载了"true"就必须重载&q

线程之间的通讯---SynchronizationContext

过年前的这段时间真是舒服,没有了平时项目发版的紧张,剩下的就是只有在网上闲逛了,哈哈! 今天早上闲逛的时候,在CodeProject发现了个不错的文章,英文好的直接去http://www.codeproject.com/KB/threads/SynchronizationContext.aspx看吧,不好,就将就的看下我的吧,呵呵!(没有直接翻译,不过大概的思路相同) 理解SynchronizationContext SynchronizationContext 类是一个基类,可提供不带同步的自

PS打造奇妙景观透明气泡中的海底世界数码合成教程

通过不同的物品组合,通过后期奇妙的手法结合,会得到一个惊喜之作. 以下这些是制作中使用到的素材图片: *photoshop教程最终的效果图 制作步骤: 1. 在photoshop中打开气泡的素材图,并将水波的素材置入到工作空间内. 2. 使用Ctrl+T命令将水波层变形成如下效果(不需要的部分可以使用橡皮擦工具擦除掉) 3. 将水波层的图层模式调整为柔光. 4. 把红色球体的素材置入到工作空间,调整到合适大小和位置后,并将黑色束带和白色圆环抠出,其余部分删除. 5. 把白色圆环部分单独抠出并和黑

WPS演示技巧之制作奇妙万花筒的方法

wps演示具有强大的自定义动画功能,巧妙运用自定义动画,可以得到一些意想不到的效果,下面我们就用WPS演示来制作奇妙的万花筒,方法如下: 1.运行WPS演示,新建一个演示文稿后,将其背景设为黑色. 2.单击"绘图工具栏"里的文本框,插入一个文本框,输入任意一段文字,例如"我爱WPSOffice!*^-^*"后,先将文字颜色设为白色,再调整字体.字号和文本框的位置. 3.选中文本框后,单击鼠标右键,在快捷菜单中单击"自定义动画"命令,在右侧的&qu

WPS演示技巧:制作奇妙万花筒

wps演示具有强大的自定义动画功能,巧妙运用自定义动画,可以得到一些意想不到的效果,下面我们就用WPS演示来制作奇妙的万花筒,方法如下: 1.运行WPS演示,新建一个演示文稿后,将其背景设为黑色. 2.单击"绘图工具栏"里的文本框,插入一个文本框,输入任意一段文字,例如"我爱WPSOffice!*^-^*"后,先将文字颜色设为白色,再调整字体.字号和文本框的位置. 3.选中文本框后,单击鼠标右键,在快捷菜单中单击"自定义动画"命令,在右侧的&qu

用WPS演示制作奇妙万花筒

WPS演示具有强大的自定义动画功能,巧妙运用自定义动画,可以得到一些意想不到的效果,下面我们就用WPS演示来制作奇妙的万花筒,方法如下: 1.运行WPS演示,新建一个演示文稿后,将其背景设为黑色(如图1). 2.单击"绘图工具栏"里的文本框,插入一个文本框,输入任意一段文字,例如"我爱WPSOffice!*^-^*"后,先将文字颜色设为白色,再调整字体.字号和文本框的位置(如图2). 3.选中文本框后,单击鼠标右键,在快捷菜单中单击"自定义动画"