请帮忙解释下Dispatcher.BeginInoke((Action)(()=>....;...;...;),null);啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请帮忙解释下Dispatcher.BeginInoke((Action)(()=>....;...;...;),null);啥意思?相关的知识,希望对你有一定的参考价值。

主要解释一下(Action)(()=>处理代码;)这种用法什么意思,这肯定是一种简写,请帮我一步一步还原到正常的写法,谢谢!!
请各位热心网友注意下我主要是想明白(Action)(()=>处理代码;)这个用法的原始写法是怎么写的,或者帮忙解释下这样的写法是什么意思。

在 WPF 中,只有创建 DispatcherObject 的线程才能访问该对象。 例如,一个从主 UI 线程派生的后台线程不能更新在该 UI 线程上创建的 Button 的内容。 为了使该后台线程能够访问 Button 的 Content 属性,该后台线程必须将此工作委托给与该 UI 线程关联的 Dispatcher。 使用 Invoke 或 BeginInvoke 来完成此操作。 Invoke 是同步操作,而 BeginInvoke 是异步操作。 该操作将按指定的 DispatcherPriority 添加到 Dispatcher 的事件队列中。

BeginInvoke 是异步操作;因此,调用之后控制权会立即返回给调用对象。

BeginInvoke 返回一个 DispatcherOperation 对象,当委托位于事件队列中时,该对象可用于与委托进行交互。

由 BeginInvoke 返回的 DispatcherOperation 对象可以采用多种方式与指定的委托进行交互,例如:

当在事件队列中挂起执行时,更改委托的 DispatcherPriority。

从事件队列中移除委托。

等待委托返回。

获取委托执行之后返回的值。

如果按同一个 DispatcherPriority 调用多个 BeginInvoke,将按调用发生的顺序执行它们。

如果对某个已关闭的 Dispatcher 调用 BeginInvoke,则返回的 DispatcherOperation 的状态属性将设置为 Aborted。追问

(Action)(()=>处理代码;)能不能帮我把这个还原到原始的写法呢?

参考技术A A: userlist1.BeginInvoke((Action)delegate....);
B: userlist1.BeginInvoke(new Action(() =>....));
userlist1是我自定义的控件,简单阐述这两种写法的区别。同问......
参考技术B (Action)(()=>处理代码;)这种简写称之为lambda表达式,它是.NET3.5之后对匿名函数的一种简化。想要还原成一般写法,你要了解委托及匿名委托。
()=>代码这个表达式,最前面的小括号内()是委托使用的参数,大括号内是委托方法的具体实现,现在小括号内容为空,表示委托方法的参数为空,也就是封转一个不包含任何参数的方法。换成一般的委托定义就是:
delegate void CommonDelegate();
而且由于匿名函数是不具备类型的,因此还需要进行类型强转,所以需要在前面加上(Action)这样的转换,表示将匿名方法转换成标注的委托类型。Action是.NET自定义的委托,表示一个不接受任何参数的委托方法。
综上所述,完整的写法应该是:
(Action)(delegate()

// 处理代码;
)
以上是匿名函数的写法,.NET2.0可以支持。如果连匿名函数也不用,那就把delegate()这一段换成普通委托定义就行了,例如:
Action action = new Action(Method);本回答被提问者和网友采纳

帮忙解释下混乱C代码

代码如下:
#include <stdio.h>
main(t,_,a)char *a;return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*w+/w#cdnr/+,r/*de+,/**+,/w%+,/w#q#n+,/#l+,/nn+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,w+K w'K:'+e#';dq#'l \
q#'+d'K#!/+k#;q#'reKK#w'reKKnl]'/#;#q#n'))#w'))nl]'/+#n';drw' i;# \
)nl]!/nn#'; r#w'r ncnl]'/#l,+'K rw' iK;[nl]'/w#q#n'wk nw' \
iwkKKnl]!/w%'l##w#' i; :nl]'/*q#'ld;r'nlwb!/*de'c \
;;nl'-rw]'/+,##'*#nc,',#nw]'/+kd'+e+;#'rdq#w! nr'/ ') +rl#'n' ')# \
'+##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
:0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);
国际C语言混乱代码大赛作品

呵呵,这种代码很多都是用工具直接混乱化的,楼主就不要尝试人工分析了。

你贴出来的这段基本上只是语法混乱,如果有兴趣的话可以用cdecl辅助分析一下看看。

混乱代码大赛的很多源码都是通过定义宏来混乱化的,那种cdecl都帮不上忙……
参考技术A 你自己都知道是乱码了。。。这根本就不是程序了

以上是关于请帮忙解释下Dispatcher.BeginInoke((Action)(()=>....;...;...;),null);啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

请高手帮忙解释下这多线程的源代码,每句注释下 #include <stdio.h> #include <stdlib.h>

请高手帮忙分析下SPSS的多元线性回归结果吧~急啊~~~

CSS 简单问题,请帮忙解释一个属性

请帮忙解释各种文件的后缀,谢谢啦

高分!!请高手帮忙解释一下.fread函数出错了!

帮忙解释下这段STRUTS2的JAVA语句