回答編集履歴

5

修正

2021/03/13 10:25

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- DynamicMethodを経由したら一応デリゲートの型を騙せましたが、使用方法的に問題ないかは全く調査・検証してないです。
1
+ DynamicMethodを経由したら一応イベントの登録には成功しましたが、使用方法的に問題ないかは全く調査・検証してないです。
2
2
 
3
3
 
4
4
 

4

修正

2021/03/13 10:25

投稿

退会済みユーザー
test CHANGED
@@ -29,6 +29,8 @@
29
29
  {
30
30
 
31
31
  static dynamic _Timer = null;
32
+
33
+ static Delegate _ElapsedHandler;
32
34
 
33
35
 
34
36
 
@@ -68,11 +70,13 @@
68
70
 
69
71
  var evElapsed = typeTimer.GetEvent("Elapsed");
70
72
 
73
+ _ElapsedHandler = dynamicElapsed.CreateDelegate(evElapsed.EventHandlerType);
74
+
71
75
  evElapsed.AddEventHandler(
72
76
 
73
77
  _Timer,
74
78
 
75
- dynamicElapsed.CreateDelegate(evElapsed.EventHandlerType));
79
+ _ElapsedHandler);
76
80
 
77
81
  _Timer.Start();
78
82
 
@@ -102,4 +106,6 @@
102
106
 
103
107
  }
104
108
 
109
+
110
+
105
111
  ```

3

修正

2021/03/13 10:23

投稿

退会済みユーザー
test CHANGED
@@ -44,10 +44,6 @@
44
44
 
45
45
 
46
46
 
47
- var evElapsed = typeTimer.GetEvent("Elapsed");
48
-
49
-
50
-
51
47
  var dynamicElapsed = new DynamicMethod(
52
48
 
53
49
  "",
@@ -69,6 +65,8 @@
69
65
  il.Emit(OpCodes.Ret);
70
66
 
71
67
 
68
+
69
+ var evElapsed = typeTimer.GetEvent("Elapsed");
72
70
 
73
71
  evElapsed.AddEventHandler(
74
72
 

2

修正

2021/03/13 08:50

投稿

退会済みユーザー
test CHANGED
@@ -46,10 +46,6 @@
46
46
 
47
47
  var evElapsed = typeTimer.GetEvent("Elapsed");
48
48
 
49
- var typeElapsedHandler = evElapsed.GetAddMethod()
50
-
51
- .GetParameters()[0].ParameterType;
52
-
53
49
 
54
50
 
55
51
  var dynamicElapsed = new DynamicMethod(
@@ -74,7 +70,11 @@
74
70
 
75
71
 
76
72
 
73
+ evElapsed.AddEventHandler(
74
+
75
+ _Timer,
76
+
77
- evElapsed.AddEventHandler(_Timer, dynamicElapsed.CreateDelegate(typeElapsedHandler));
77
+ dynamicElapsed.CreateDelegate(evElapsed.EventHandlerType));
78
78
 
79
79
  _Timer.Start();
80
80
 

1

修正

2021/03/13 08:48

投稿

退会済みユーザー
test CHANGED
@@ -48,9 +48,7 @@
48
48
 
49
49
  var typeElapsedHandler = evElapsed.GetAddMethod()
50
50
 
51
- .GetParameters()[0]
51
+ .GetParameters()[0].ParameterType;
52
-
53
- .ParameterType;
54
52
 
55
53
 
56
54
 
@@ -61,6 +59,8 @@
61
59
  typeof(void),
62
60
 
63
61
  new Type[] { typeof(object), typeof(object) });
62
+
63
+
64
64
 
65
65
  var il = dynamicElapsed.GetILGenerator();
66
66