0

クラスを作成しています。このクラスは、dllファイルとして.NETプロジェクトに追加する必要があります。System.Diagnostics.StackTrace"last_method_name_changed"にイベントを作成する必要があるポイントで立ち往生しています。

したがって、StackTraceの変更を検出する方法を見つけるか、スレッドがメソッドに出入りするときに発生するイベントを作成する必要があります。何かのようなもの:

Public Class DllClass
    Public Shared CallerTrace as StackTrace = Nothing
    Public Shared New(ByRef NewTrace as StackTrace) 'This is called from form.
        '''I know this will make a copy, but I have failed to find a solution.
        CallerTrace = NewTrace
    End Sub
    Public Shared Sub StackTrace_Changed() Handles CallerTrace.Changed
        MsgBox(CallerTrace.GetFrame(0).GetMethod.Name)
    End Sub
End Class

メインフォームから、これは1回だけ呼び出す必要があります。

Dim DllCls as New DllClass(New Diagnostics.StackTrace)

「参照リンク」またはStackTraceへのポインタと、CallerTrace.GetFrame(0).GetMethod.Name変更されたときに発生するイベントの作成にご協力いただければ幸いです。

4

1 に答える 1

1

参照型のようにコピーは作成されませんStackTrace(参照に代入しても、基になるオブジェクトはコピーされません)。パラメータ宣言のByRefは無関係で冗長です。

一方、CallerTraceas を宣言しなかったWithEventsので、それによって発生するイベントを実際にリッスンしません。ただし、System.Diagnostics.StackTraceリッスンできるパブリック イベントが宣言されていないため、これは機能しません。メソッド呼び出しをインターセプトするためのアプローチは、基本的に機能しません。

思い描いた方​​法でメソッド呼び出しをインターセプトするには、さらに掘り下げる必要があります。幸いなことに、 AOP ライブラリ PostSharpなど、すでにそれを許可しているライブラリがあります。

于 2013-01-16T13:48:22.193 に答える