定期的に操作を起動する必要があるWindowsアプリに取り組んでおり、時間がかかる場合があります。これらの操作をBackgroundWorkerで実行し、操作ごとに簡単なWinFormを作成するパターンになりました。ここで、フォームに必要なパラメーターを渡し、フォームをBackgroundWorkerに接続して、関数呼び出しを行います。フォームに出力が表示されます(プログレスバーの移動、テキストが更新でいっぱいになるなど)。
明らかに、このフォームは非常にクッキーカッターです。フォームコピー間で実際に異なるのは、どのメソッドがどのオブジェクトで呼び出されるかだけです。ですから、私たちがやりたいのは、それを汎用化することです。これにより、フォームを取得し、オブジェクト(静的呼び出しの場合はnull?)、関数名、およびパラメーターの配列を渡して、「実行」することができます。そこから。Reflectionを使用してこれを行うことができました。この場合のリフレクションについて私たちが気に入らないのは、強い型付けがないことです。メソッド呼び出しのスペルミスなどは、コンパイル時ではなく、実行時にキャッチされます。これをよりエレガントで堅牢にする可能性のあるものはありますか?デリゲートやエクスプレッションツリーなどについて話している人の話を聞いたことがあります。しかし、前者が当てはまるかどうかはわかりませんが、後者についてはまだ少し暗闇の中でです。