- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 Winforms 中,所有控件都有一个 InvokeRequired
属性,如果我必须调用 .[Begin]Invoke 控件以修改它,它会返回 true。
在 WPF 中,DispatcherObject.CheckAccess()
和 Dispatcher.CheckAccess()
中有一个明显相似的构造,但我被 EditorBrowsable( EditorBrowsableState.Never)
属性。当我禁用这样的编辑器浏览时,我用它来表示“你不应该不这样做。不,真的。如果这需要解决你眼前的问题,你错误地设计了你的解决方案首要问题。”另一方面,我发现的唯一替代方案(事实上,也是我最初的解决方案)是 Thread.CurrentThread.ManagedThreadId == 1
。 (这太可怕了。它在一般情况下不起作用。我知道。不过它确实对我的有限用途有效。)
MSDN documentation对 EditorBrowsable
属性的存在和背后的原因保持沉默。它确实意味着“不要使用这个”,就像我输入它时那样,还是它有其他一些不那么禁止的意思?
最佳答案
在 WPF 中,无论当前线程如何,您都可以调用 Dispatcher.Invoke
,它会相应地处理调用 - 如果您已经在正确的线程上,它只会调用您的代码,它使用 CheckAccess
来处理这种行为。
对于 BeginInvoke
,您当前所在的线程是无关紧要的:BeginInvoke
始终是异步的,执行顺序取决于您添加的项目的优先级到调度员的队列。
如果您根本不应该使用该方法,它就不会公开:该属性的目的只是为了从 Intellisense 和其他编辑器-浏览器等机制中隐藏该成员。您通常不需要自己使用 Dispatcher.CheckAccess()
,这可能就是它被标记为不可浏览的原因,但我们只能猜测它的智慧(除非 Eric Lippert 是看着 ;-)
总结:只需调用 Dispatcher.Invoke
而不必担心 CheckAccess
。
关于c# - 正确使用(或不使用)Dispatcher.CheckAccess(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937902/
在 Async webservice on complete 事件中,有如下代码: Debug.Assert(Dispatcher.CheckAccess()); // don't do marsha
我有一个问题。我需要使用传递一个参数(对控件的引用)的函数: public void recalculateFontSize(ref TextBlock component) { ... } 我想使用
我正在学习 Yii 并且正在尝试开发 RBAC 现在的问题是我已经创建了角色等通过 shell 执行了该脚本我有数据库表并且角色和所有内容都被填充。现在我不知道为什么但是 if(Yii::app()-
在 Winforms 中,所有控件都有一个 InvokeRequired 属性,如果我必须调用 .[Begin]Invoke 控件以修改它,它会返回 true。 在 WPF 中,DispatcherO
Product.supplierID = Supplier.supplierID --------- ---------- |Product|---------|Supplier| -
IntelliJ建议我将不赞成使用的Thread.suspend()替换为Thread.checkAccess()。基于the (very brief) documents,checkAccess()
System.Windows.Threading.DispatcherObject类(基于DependencyObject的类)包含一个有用的函数CheckAccess(),它确定代码是否在UI线程上
我想知道以下代码是否会带来任何性能提升: if (Deployment.Current.Dispatcher.CheckAccess()) { DoUIWork(); } else {
我有一段代码有时从 UI 线程调用,有时从其他线程调用。 public void Notify(string message) { if (message == nul
在遍历 this 时文章我遇到了这个声明- If you are writing your own WPF objects, such as controls, all methods you use
我正在开发一个使用 ACS 进行身份验证的 ASP.NET MVC 应用程序。用户必须经过身份验证才能访问网站的任何部分。 我已经创建并配置了我的 ClaimsAuthorizationManager
我是一名优秀的程序员,十分优秀!