いいえ、デリゲートをイベント ハンドラーに "割り当てる" ことはできません。ハンドラーは、イベントを表すために内部的に使用される基になるデリゲートの呼び出しリストにハンドラーを追加することによって、イベントにアタッチされます。これは設計によるものです。
いいえ、イベント ハンドラーをアタッチするために以前に使用された参照が指すオブジェクトを変更することによって、ハンドラーを変更することはできません。一部にはデリゲートが immutableであるため、また一部には参照を変更して別のものを指すようにするためであり、達成しようとしているイベントハンドラーを実際には変更しないためです。
デリゲートを変更するには、まず前のデリゲートを削除する必要があります。
backgroundworker.DoWork -= dweh;
次に、イベントのハンドラーとして追加して、新しいものを割り当てます。
backgroundworker.DoWork += new DoWorkEventHandler(method2);
ノート
ほとんどの場合、次の構文を使用して、イベントからハンドラー (デリゲート) を削除できます。
backgroundworker.DoWork -= new DoWorkEventHandler(mehtod1);
または、暗黙的または明示的なメソッド グループ変換を使用します。
backgroundworker.DoWork -= (DoWorkEventHandler)mehtod1; // explicit convertion
// - or -
backgroundworker.DoWork -= mehtod1; // implicit (more compact)
ただし、状況によっては、後で削除できるようにするために、前のデリゲートへの参照を維持する必要がある場合があります。たとえば、これは匿名メソッドまたはラムダ式に適用されます。