Feliratkozás event-re reflection-nel
2013-09-02T10:53:13+02:00
2013-09-03T09:29:45+02:00
2022-08-17T13:55:32+02:00
-= Ghost =-
Sziasztok!

Adott a következő osztály:

[FriendVisible(true)] [FriendVisible(true)] internal class HistoryStack { // Fields private EventHandler<EventArgs> Changed; private List<string> displayNameStack; // Events public event EventHandler<EventArgs> Changed; private void OnChanged();

...

[FriendVisible(true)] internal HistoryStack UndoStack { get { return this.undoRedoManager.UndoStack; } }

Az osztályt egy DLL tartalmazza. Szeretnék feliratkozni valamelyik saját osztályon belül a Changed eseményre, hogy vizsgálni tudjam az aktuális osztályok állapotát Undo után. Az Undo-t szintén a DLL-ből kezelik. Nincs ráhatásunk.

A feliratkozást a következőképp próbáltam megvalósítani kevés sikerrel:


var documentManager = analysisApplication.GetType().GetProperty("DocumentManager", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(analysisApplication, new object[] { }); var commandHistory = documentManager.GetType().GetProperty("CommandHistory", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(documentManager, new object[] { }); var undoStack = commandHistory.GetType().GetProperty("UndoStack", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(commandHistory, new object[] { }); var redoStack = commandHistory.GetType().GetProperty("RedoStack", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(commandHistory, new object[] { }); var eventInfo = undoStack.GetType().GetEvent("Changed", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); Type type = eventInfo.EventHandlerType; MethodInfo handler = GetType().GetMethod("OnUndoStackChanged", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); if (handler != null) { Delegate del = Delegate.CreateDelegate(type, this, handler); eventInfo.AddEventHandler(this, del); } ... ... ... void OnUndoStackChanged(object sender, EventArgs e) { string str = ""; }


Az eventInfo.AddEventHandler(this, del); sornál kapom csak a TargetInvocationException-t.

Ehhez kérnék egy kis segítséget Tőletek.

Előre is köszönöm a segítségeteket
Mutasd a teljes hozzászólást!
Mutasd a teljes hozzászólást!

abcd