ContextMenu, S4ContextMenu
このブログで推奨されているように、 IDisposable を実装してメモリ リークの問題を処理するカスタムを作成しようとしています。
http://silverlight.codeplex.com/workitem/6206
ブログに記載されているように、S4ContextMenu の Dispose 関数にこのコードを含めました。
MethodInfo infos = typeof(ContextMenu).GetMethods(BindingFlags.NonPublic |
BindingFlags.Instance).Where(a =>
a.Name.Equals("HandleRootVisualMouseMove")).FirstOrDefault();
Delegate handler = Delegate.CreateDelegate(typeof(MouseEventHandler), this , infos);
EventInfo info = Application.Current.RootVisual.GetType().GetEvent("MouseMove");
info.RemoveEventHandler(Application.Current.RootVisual, handler);
正常にコンパイルされますが、実行すると MethodAccessException: " Attempt by method 'S4.Analytics.Client.Controls.S4ContextMenu.Dispose(Boolean)' to access method 'System.Windows.Controls.ContextMenu.HandleRootVisualMouseMove(System.Object, System.Windows.Input.MouseEventArgs)' failed.
"が発生します。
S4ContextMenu
代わりにMethodInfo を取得しようとしましContextMenu
たが、null が返されます。
で開発していVS 2010, targeting Silverlight 4
ます。
私は何が欠けていますか?
このデリゲートを作成するにはどうすればよいですか?
メモリリークの問題に対処するためにこのアプローチを使用したいと思いますが、誰かが別の方法で機能する (実際のContextMenu
またはを編集する必要がないtoolkit
) 場合、それは素晴らしいことです。