Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(() =>
{
и
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
Ответ 1
Не должно быть разницы. ThreadStart и Action определяются как
public delegate void ThreadStart();
public delegate void Action();
i.e., делегат без параметров и никакого возвращаемого значения. Таким образом, они семантически одинаковы.
Однако я бы использовал Action, а не ThreadStart, поскольку ThreadStart сильно связан с конструктором Thread, поэтому код с ThreadStart может намекать на прямое создание потоков и, следовательно, слегка вводить в заблуждение.
Ответ 2
Похоже, что существует разница между ThreadStart и Action в контексте BeginInvoke.
Они оба будут правильно выполнять код внутри делегата, как сказал Влад.
Однако, если в делегате возникает исключение, ThreadStart приводит к TargetInvocationException. Но использование Action дает вам правильное исключение из делегата.
Action должно быть предпочтительным по этой причине.