- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
阅读了短语 "The current SynchronizationContext is a property of the current thread" correct" ,我有点懵了……
在 VS2010 的 C# 应用程序代码中,当我键入 Thread.CurrentThread.
时,我没有在 Intellisense 提供的选项下拉列表中找到线程的任何上下文相关属性。
我知道可以通过 "= SynchronizationContext.Current;
"获取当前同步上下文。但这在并行线程、任务等中同时执行就不太幸运了。
假设我从控制台或 WPF (*) 应用创建并启动 a few Windows forms in its own main UI threads以及 TPL 任务。
我误解了每个 winform 都应该有自己的 WindowsFormaSynchronizationContext , WPF 应该有自己的 DispatcherSynchronizationContext (SynchronizationContext class 的子类)实例,任务在 ThreadPool 中执行有自己的同步上下文,LongRunning任务很可能会在其自己的同步上下文中从线程池中执行...
那么,为什么不能从线程定义SynchronizationContext
? "Get SynchronizationContext from a given Thread"的所有答案问题似乎一致否定了这种可能性……
最后但同样重要的是:
是语句"The current SynchronizationContext is a property of the current thread" correct"对吗?
那么,如何为不同的特定线程实例获取此属性的值呢?
(*)
最近,我获得了基本上使用 winforms 的 C# WPF 应用程序代码。
最佳答案
这是准确的。 SynchronizationContext.Current 属性使用当前线程的 m_ExecutionContext 字段。这是 Thread 类的私有(private)字段,这就是您在 IntelliSense 下拉列表中看不到它的原因。
重要的是它以这种方式工作,默认的 SynchronizationContext 不同步任何东西。它的 Post() 方法目标在线程池线程上运行。将目标调用编码到特定 线程是一件非常重要的事情。这需要目标线程的帮助,它需要提供解决方案 producer-consumer problem .通用解决方案是一个从线程安全队列中检索消息的循环。正是 Winforms 或 WPF 应用程序的 UI 线程的工作方式,它们“泵送消息循环”。 Application.Run() 启动该循环。
因此,只有此类应用的 UI 线程才能支持不使用线程池线程来运行 Post() 委托(delegate)目标的同步提供程序。因此,只要您创建窗体或窗口,Winforms 和 WPF 就会安装它们自己的同步提供程序。并且只有在 UI 线程上运行的代码才能从 SynchronizationContext.Current 属性中看到该非默认提供程序。
结果是您必须在 UI 线程上初始化需要将调用编码回 UI 线程的代码。因此,例如创建 BackgroundWorker 必须在 UI 线程上完成。或者使用 TaskScheduler.FromCurrentSynchronizationContext 创建的任务。从技术上讲,可以有多个线程显示 UI,无论运行初始化代码的线程都决定了 Post() 委托(delegate)目标将在何处运行。这可能解释了您的问题,如果您的初始化代码在工作线程上运行,则 Post() 目标在线程池线程上运行。您可以将对 Synchronization.Current 对象的引用传递给工作线程,只要您在 UI 线程上获得该引用即可。
关于c# - 书中的短语 "The current SynchronizationContext is a property of the current thread"是否正确”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296369/
我的英语很差,抱歉 这是我的结构: bookstore ---author(app1) ---book(app2) 或者在代码中: from django.db import models from
我对antlr 的理解停留在非常基础的层面。浏览 Parr 博士的“权威 ANTLR 4 引用”。在第 4.2 节“使用访问者构建计算器”中列出了以下语法: grammar LabeledExpr;
我对antlr 的理解停留在非常基础的层面。浏览 Parr 博士的“权威 ANTLR 4 引用”。在第 4.2 节“使用访问者构建计算器”中列出了以下语法: grammar LabeledExpr;
我正在学习 1.1.0 的 rust book 教程,但尝试运行他们的代码时出现错误。 我有以下内容: extern crate rand; use std::io; use std::cmp::Or
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我的帖子是书的代码。 void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *)); /*Why it
考虑到 Fluent NHibernate 已经有一段时间了,我想应该会有一本书可以买到,所以我在亚马逊和谷歌中搜索,但没有关于 fluent nhiberanet 的书籍。我是对的还是这本书已经存在
考虑到 DocBook 格式的书可以以“模块化”的方式完成,我希望我可以用 AsciiDoc 做类似的事情,并将章节和第一级部分拆分到单独的文件中。不幸的是,文档没有提及这一点。到目前为止,我看到的唯
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我目前正在使用 Jquery 使用 turn.js 制作一本书,进展顺利,但我需要一点帮助。你看,我正在尝试制作一本精装期刊类型的书,就像此处显示的示例一样 http://www.turnjs.com
我正在阅读 Bjarne S 的 C++ 编程语言。 在第 77 页,第 4.8 节中,我发现了这一点: "枚举器可以用常量表达式初始化(§C.5) 的整数类型 (§4.1.1)。这枚举的范围包含向上
为什么当我输入由空格分隔的字符串(在 while 循环之外)并且我尝试在屏幕上打印它们时,只有我输入的第一个出现,而在这个 while 循环中(见代码)它打印所有这些一个? //this one pr
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在读这本书并被困在这里: public static class EventArgExtensions { public static void Raise(this TEventArgs
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在尝试使用 xlwt 创建具有多个选项卡的输出文件(.xlsx 格式)。我的Python版本号是2.7,IDE是Aptana Studio 3。 我以前使用过 xlwt 包,在相同的环境下执行相同
如何使用 Xcode 或 macOS 打开 Swift Playground Book?当我打开它时,我得到了这个: 最佳答案 在 Xcode 上,转到 Navigate > Reveal in Pr
嗨,我对 php 很陌生,我正在阅读 Murach PHP 书。我在单击类别部分中的链接时遇到问题,因为当它单击该链接时,它会广告 ?category_id=3 但问题是它在 add_product.
我是一名优秀的程序员,十分优秀!