Мы работаем над приложением Windows, которое периодически запускает операции, которые могут занять некоторое время. Мы получили представление о том, что эти операции выполняются на BackgroundWorker и записывают быстрый WinForm для каждой операции, где вы передаете форме необходимые параметры, форма соединяется с BackgroundWorker и вызывает вызов функции, и форма отображает результат (индикатор выполнения перемещается, текст заполняется обновлениями и т. д.).Генерирование рабочего стола .NET
Теперь, очевидно, эта форма является очень куки-резаком. Единственная часть, которая действительно отличается между копиями формы, - это какой метод вызывается на каком объекте. Итак, что мы хотели бы сделать, это сделать его общим, чтобы мы могли принять форму, передать объект (или null для статических вызовов?), Имя функции и массив параметров, и заставить ее просто «идти», оттуда. Мы смогли сделать это с помощью Reflection. То, что нам не нравится в этом случае, - это отсутствие сильной типизации; такие вещи, как неправильное написание вызова метода, попадают во время выполнения, а не во время компиляции. Есть ли что-нибудь доступное сейчас, которое может сделать это более элегантным и надежным? Я слышал о людях, которые говорили о вещах, таких как Делегаты и Деревья выражений; но я не уверен, что первое применимо и все еще немного в темноте о последнем.
Как я понял, мне нужно было создать новый делегат для каждого метода, который в конечном итоге может быть вызван таким образом? – GWLlosa
@GWLIosa. Я попытался немного расширить ответ, чтобы уточнить это. Вам не нужно указывать явный тип делегата для каждого метода. – driis