有人知道
之间的区别Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(() =>
{
和
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
答案 0 :(得分:12)
应该没有区别。 ThreadStart
和Action
定义为
public delegate void ThreadStart();
public delegate void Action();
即,没有参数且没有返回值的委托。所以它们在语义上是一样的。
但是,我会使用Action
而非ThreadStart
,因为ThreadStart
与Thread
构造函数密切相关,因此ThreadStart
的代码可以提示直接创建线程,因此有点误导。
答案 1 :(得分:5)
在ThreadStart
的上下文中,{em> 在Action
和BeginInvoke
之间存在差异。
正如Vlad提到的那样,他们都会正确地在委托中运行代码。
但是,如果代理中发生异常,ThreadStart
会产生TargetInvocationException
。但是使用Action
会从委托中为您提供正确的异常。
Action
应该是首选。