То, что действительно использует Dispatcher.Invoke
- это не "вместо".Этот код просто использует ThreadStart
как способ сообщить компилятору тип делегата для преобразования анонимного метода в.
Это эквивалентно:
ThreadStart tmp = delegate
{
// Code
};
Dispatcher.Invoke(tmp);
Лично я бы использовал Action
вместо ThreadStart
здесь, поскольку вы на самом деле не запускаете поток, но это довольно произвольный выбор.Не обращайте внимания на тот факт, что он называется ThreadStart
- это просто делегат с пустым типом возврата и без параметров.
РЕДАКТИРОВАТЬ: причина, по которой вы должны указать a Тип делегата заключается в том, что компилятор не может преобразовать анонимную функцию (т. е. анонимный метод или лямбда-выражение) в просто Delegate
, который является типом аргумента Dispatcher.Invoke
.
.написать метод расширения:
public static void InvokeAction(this Dispatcher dispatcher, Action action)
{
dispatcher.Invoke(action);
}
Затем вы можете использовать:
foo.Dispatcher.InvokeAction(() => { /* stuff */ });
, и компилятор знает, как преобразовать лямбда-выражение в Action
.