首页 > 其他分享 >Application.Current.Dispatcher.Invoke VS Dispatcher.CurrentDispatcher.Invoke

Application.Current.Dispatcher.Invoke VS Dispatcher.CurrentDispatcher.Invoke

时间:2024-03-21 10:58:37浏览次数:29  
标签:Invoke Current Application UI 线程 Dispatcher

写WPF的多线程一定离不开这两个东西,但是一些偶尔中发现项目中同事功能我多线程调用的时候发现线程安全问题,
一查,他们都把核心操作都放在了UI线程中操作呀 还是全局大范围的直接放Application.Current.Dispatcher.Invoke,
但是依然出现,细查后发现,有的人使用的是Application.Current.Dispatcher 有的人使用的是Dispatcher.CurrentDispatcher
那么他们之间什么区别呢?
1 Application.Current.Dispatcher.Invoke:
Application.Current.Dispatcher 是一个静态属性,它返回当前应用程序的主线程调度程序(Dispatcher)。
调用 Application.Current.Dispatcher.Invoke 将在应用程序的主线程上同步执行指定的操作。
这个方法通常用于在应用程序的任何地方调用UI线程上下文,无论当前代码位于哪个线程上下文。

2 Dispatcher.CurrentDispatcher.Invoke:
Dispatcher.CurrentDispatcher 是一个实例属性,它返回当前线程的调度程序(Dispatcher)。
调用 Dispatcher.CurrentDispatcher.Invoke 将在当前线程上同步执行指定的操作。
这个方法通常用于在后台线程上执行UI操作,或者在自定义的线程上下文中执行UI操作。

Application.Current.Dispatcher.Invoke 用于在主线程上执行UI操作,而 Dispatcher.CurrentDispatcher.Invoke 则用于在当前线程上执行UI操作。在大多数情况下,你应该使用 Application.Current.Dispatcher.Invoke 来确保在UI线程上执行操作,因为它保证了在WPF应用程序中正确的UI线程上下文中执行操作

标签:Invoke,Current,Application,UI,线程,Dispatcher
From: https://www.cnblogs.com/stweily/p/18086829

相关文章

  • 内核current指针
    内核current指针在Linux内核中,current是一个特殊的宏,它用于指向当前正在执行的进程描述符。这个宏通常用于内核代码中,以便访问当前进程的各种属性和状态。进程描述符在Linux内核中是一个关键的数据结构,用于表示一个进程或线程。它包含了进程的许多重要信息,如PID(进程ID)、进程状......
  • 【PostgreSQL PGCE-091题目解析14】PostgreSQL中使用CONCURRENTLY选项创建索引时,允许
    本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。PostgreSQL中使用CONCURRENTLY选项创建索引时,允许增删改数据表。A.正确B.错误参考答案:A解析:我们知道,PG是有行级琐的,在创建索引的时候,会在行上加琐......
  • 解决: java.util.concurrent.CancellationException详解
    解决:java.util.concurrent.CancellationException详解......
  • java.util.ConcurrentModificationException
    用for循环遍历删除不会报错但是结果未达到预期解决方法......
  • 什么是ConcurrentHashMap?不同JDK下ConcurrentHashMap的区别?
    什么是ConcurrentHashMap?不同JDK下ConcurrentHashMap的区别?  一、HashMap线程安全  我们知道,在并发情况下,使用HashMap会有线程安全的问题,那么如何避免呢?  想要避免Hashmap的线程安全问题有很多办法,比如改用HashTable或者Collections.synchronizedMap  但是,这两者......
  • Git - error:you need to resolve your current index first 解决方案
    场景:从dev-test分支上拉取dev分支上的代码(意外操作,本应该拉取dev-test分支)相当于从一个分支A,切换到分支B,对B分支进行了pull的操作错误提示:error:youneedtoresolveyourcurrentindexfirst原因:在执行pull操作时,实际是执行了:fetch+merge两个操作。由于分支B很久未......
  • 在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invo
    在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invoke-WebRequest、New-Object和Start-BitsTransfer命令来下载文件的方法。使用Invoke-WebRequestInvoke-WebRequest是一个非常强大的命令,用于向网页发送HTTP和HTTPS请求。你可以使用它来下载文......
  • 动态代理中debug设置断点会执行invoke方法且args为null的原因
    情景写了个proxyExample,运行一看,竟然debug的结果跟run的结果竟然不一样,debug中会多次执行invoke方法,且并不调用sayHello方法代码publicclassProxyExampleimplementsInvocationHandler{privateObjecttarget;/***创建代理,将真实对象的类、构造方法等信息告诉代理类并......
  • PowerShell 中,您可以通过远程控制执行多条命令。最常见的方法是使用 Invoke-Command
    PowerShell中,您可以通过远程控制执行多条命令。最常见的方法是使用Invoke-Command命令,它允许您在远程计算机上执行指定的命令或脚本块。以下是一种执行多条命令的示例:powershellCopyCodeInvoke-Command-ComputerName"远程计算机名"-ScriptBlock{#在这里可以放置要......
  • ConcurrentSkipListMap
    为了引出ConcurrentSkipListMap,先带着大家简单理解一下跳表。对于一个单链表,即使链表是有序的,如果我们想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查......