Здравствуйте. При работе с GUI в разных потоках часто приходится делать инвокеры.
Сейчас я делаю так:
public void ClearData()
{
if (!Dispatcher.CheckAccess())
{
Dispatcher.BeginInvoke(new MethodInvoker(() =>
{
ClearData();
}));
}
else
{
/// do anything
}
}
А может кто нибудь знает каким образом можно написать статический метод расширения чтобы можно было применить его к любому методу в любом классе с любым количеством параметров??
Чтобы можно было всегда писать что то типа такого?
ClearData().SaveInvoke();
или
ClearData(p1,p2).SaveInvoke();
или
ClearData(p1,p2).SaveInvoke(p1,p2);
Так а зачем оно? И к чему тут расширения если ClearData это просто функция, а не класс? Как это работать будет если мы вызвали функцию, а потом на её результате вызвали расширение? Она тогда должна не делать ничего, а вернуть какой-нибудь объект с колбэком внутри, но это странно и наоборот усложняет.
Если нужно написать обертку, чтобы не писать эту кучу кода везде, то самый простой и понятный вариант — создавать и передавать функцию как в моем примере.
Ну по async/await много примеров/статей/курсов, это крутая модная штука, которую уже добавили во многие языки, чтобы избавиться от callback hell.
Так при чем тут асинк … у меня задча организовать взаимодействия с гуи между потоками.
Есть рабочий процесс который чтото делает и ему надо выводить информацию в график. Но этот же метод иногда надо вызывать в рамках своего же процесса. то есть инвокер то нужен то нет.
Но постоянно прописывать в каждом методе один и тот же код по выводу это муторно.