ThreadStart和Action之间的区别

时间:2012-10-16 14:16:58

标签: c# .net wpf

有人知道

之间的区别
Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(() =>
{

Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{

2 个答案:

答案 0 :(得分:12)

应该没有区别。 ThreadStartAction定义为

public delegate void ThreadStart();

public delegate void Action();

即,没有参数且没有返回值的委托。所以它们在语义上是一样的。


但是,我会使用Action而非ThreadStart,因为ThreadStartThread构造函数密切相关,因此ThreadStart的代码可以提示直接创建线程,因此有点误导。

答案 1 :(得分:5)

ThreadStart的上下文中,{em> 在ActionBeginInvoke之间存在差异。

正如Vlad提到的那样,他们都会正确地在委托中运行代码。

但是,如果代理中发生异常,ThreadStart会产生TargetInvocationException。但是使用Action会从委托中为您提供正确的异常。

出于这个原因,

Action应该是首选。

查看this question