0

通常、私は行きます:

bgwExportGrid.RunWorkerCompleted += ReportManager.RunWorkerCompleted;

ReportManager クラスは、使用するイベント ハンドラーを含む静的クラスです。

public static class ReportManager
{
        public static void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
        ...
        }
}

BackgroundWorker を作成したので、ReportManager で定義されているように RunWorkerCompleted イベントをアタッチします。ただし、ReportManager は参照できません。そうしないと、循環参照が発生するため、リフレクションが必要になります。

どんな助けでも大歓迎です。

私は以下を見てきましたが、あまり遠くには行きませんでした:

        Assembly assem = Utils.GetAssembly("WinUI.Reporting.Common.dll");
        Type reportManagerType = assem.GetModule("WinUI.Reporting.Common.dll").GetType("WinUI.Reporting.Common.ReportManager");
        EventInfo evWorkerCompleted = reportManagerType.GetEvent("RunWorkerCompleted");
        Type tDelegate = evWorkerCompleted.EventHandlerType;
4

3 に答える 3

0

それを機能させることができました。ReportManagerは静的クラスであるため、Activator.CreateInstanceを使用する必要はありません。

        Assembly assem = Utils.GetAssembly("WinUI.Reporting.Common.dll");
        Type reportManagerType = assem.GetModule("WinUI.Reporting.Common.dll").GetType("WinUI.Reporting.Common.ReportManager");
        bgwExportGrid.RunWorkerCompleted += (RunWorkerCompletedEventHandler)Delegate.CreateDelegate(typeof(RunWorkerCompletedEventHandler), reportManagerType, "RunWorkerCompleted");
于 2009-07-14T13:13:26.790 に答える
0

更新された回答:

Assembly assem = Utils.GetAssembly("WinUI.Reporting.Common.dll");

Type reportManagerType = assem.GetModule("WinUI.Reporting.Common.dll").GetType("WinUI.Reporting.Common.ReportManager");

// obtain the method info
MethodInfo mi = reportManagerType.GetMethod("RunWorkerCompleted", 
                                            BindingFlags.Static | BindingFlags.Public);

// create a delegate that we can further register with the event
Delegate handler = Delegate.CreateDelegate(reportManagerType , mi);

// get the event info from the export grid object
EventInfo evWorkerCompleted = bgwExportGrid.GetType().GetEvent("RunWorkerCompleted");

// invoke the event
evWorkerCompleted.AddEventHandler(bgwExportGrid, handler);
于 2009-07-14T11:41:35.777 に答える