質問編集履歴

3

IDisposeを設定して発生したエラー内容を記載

2020/06/18 18:06

投稿

hasshy
hasshy

スコア102

test CHANGED
File without changes
test CHANGED
@@ -178,10 +178,30 @@
178
178
 
179
179
 
180
180
 
181
+ #### 発生したエラー
182
+
181
183
  実装したところ別の警告が発生して、Appクラスそのものを大きく修正しないと解決出来ないエラーが発生しました。
182
184
 
183
185
 
184
186
 
187
+ コード|説明
188
+
189
+ ---|---
190
+
191
+ CA1065|Dispose は型 NotImplementedException の例外を作成します。この型のメソッドでは例外を発生させることはできません。この例外インスタンスが発生する可能性がある場合は、例外が発生しないようにこのメソッドのロジックを変更します。
192
+
193
+ CA1063|'App' で Dispose(bool) のオーバーライド可能な実装を提供するか、型を sealed としてマークします。Dispose(false) を呼び出す場合は、ネイティブ リソースのみがクリーンアップされます。Dispose(true) を呼び出す場合には、マネージド リソースとネイティブ リソースの両方がクリーンアップされます。
194
+
195
+ CA2000|'new App()' が作成したオブジェクトへの参照がすべてスコープ外になる前に、そのオブジェクトの System.IDisposable.Dispose を呼び出してください。
196
+
197
+ CA1063|'App.Dispose' を変更し、Dispose(true) を呼び出したのちに現在のオブジェクト インスタンスで GC.SuppressFinalize (Visual Basic の 'this' または 'Me') を呼び出して、結果を戻すようにします。
198
+
199
+ CA1816|GC.SuppressFinalize(object) を呼び出すように App.Dispose() を変更します。これにより、ファイナライザーを導入する派生型で、その呼び出しのために 'IDisposable' を再実装する必要がなくなります。
200
+
201
+
202
+
203
+
204
+
185
205
  ## 所見
186
206
 
187
207
  エラーの解説ページの修正方法が、IDisposableインターフェイスとして実装と書かれている事です。

2

誤記削除

2020/06/18 18:06

投稿

hasshy
hasshy

スコア102

test CHANGED
File without changes
test CHANGED
@@ -73,28 +73,6 @@
73
73
  /// </summary>
74
74
 
75
75
  private NotifyIconWrapper NotifyIconWrapper = new NotifyIconWrapper();
76
-
77
-
78
-
79
- /// <summary>
80
-
81
- /// System.Windows.Application.Startup イベントのラッパー
82
-
83
- /// </summary>
84
-
85
- /// <param name="e"></param>
86
-
87
- protected override void OnStartup(StartupEventArgs e)
88
-
89
- {
90
-
91
- base.OnStartup(e);
92
-
93
- this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
94
-
95
- this.notifyIcon = new NotifyIconWrapper();
96
-
97
- }
98
76
 
99
77
 
100
78
 

1

ソースにonstartup関数を追記

2020/06/18 17:53

投稿

hasshy
hasshy

スコア102

test CHANGED
File without changes
test CHANGED
@@ -44,6 +44,8 @@
44
44
 
45
45
  アプリケーションを終了する際にコンポーネントクラスを開放します。
46
46
 
47
+ 開始時にインスタンスを作る処理を記載し忘れておりました。
48
+
47
49
 
48
50
 
49
51
  ```cs
@@ -70,10 +72,108 @@
70
72
 
71
73
  /// </summary>
72
74
 
75
+ private NotifyIconWrapper NotifyIconWrapper = new NotifyIconWrapper();
76
+
77
+
78
+
79
+ /// <summary>
80
+
81
+ /// System.Windows.Application.Startup イベントのラッパー
82
+
83
+ /// </summary>
84
+
85
+ /// <param name="e"></param>
86
+
87
+ protected override void OnStartup(StartupEventArgs e)
88
+
89
+ {
90
+
91
+ base.OnStartup(e);
92
+
93
+ this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
94
+
95
+ this.notifyIcon = new NotifyIconWrapper();
96
+
97
+ }
98
+
99
+
100
+
101
+ /// <summary>
102
+
103
+ /// System.Windows.Application.Exit イベントのラッパー
104
+
105
+ /// </summary>
106
+
107
+ /// <param name="e"></param>
108
+
109
+ protected override void OnExit(ExitEventArgs e)
110
+
111
+ {
112
+
113
+ base.OnExit(e);
114
+
115
+ this.NotifyIconWrapper.Dispose();
116
+
117
+ }
118
+
119
+ }
120
+
121
+ }
122
+
123
+ ```
124
+
125
+
126
+
127
+ ### Visual Studioのログに表示されるエラー
128
+
129
+ > CA1001: 型'App'は破棄可能なフィールド'notifyIcon'を所有しますが、破棄可能ではありません。
130
+
131
+
132
+
133
+ ## 試した事
134
+
135
+ クイックアクションとリファクタリングを参考に、```IDisposable```インターフェイスを実装しました。
136
+
137
+
138
+
139
+ ```cs
140
+
141
+ namespace SampleProject
142
+
143
+ {
144
+
145
+ /// <summary>
146
+
147
+ /// App.xaml の相互作用ロジック
148
+
149
+ /// </summary>
150
+
151
+ public partial class App : Application, IDisposable
152
+
153
+ {
154
+
155
+
156
+
157
+ /// <summary>
158
+
159
+ /// タスクトレイに表示するアイコンのコンポーネント
160
+
161
+ /// </summary>
162
+
73
163
  private NotifyIconWrapper notifyIcon = new NotifyIconWrapper();
74
164
 
75
165
 
76
166
 
167
+ public void Dispose()
168
+
169
+ {
170
+
171
+ throw new NotImplementedException();
172
+
173
+ }
174
+
175
+
176
+
77
177
  /// <summary>
78
178
 
79
179
  /// System.Windows.Application.Exit イベントのラッパー
@@ -100,82 +200,6 @@
100
200
 
101
201
 
102
202
 
103
- ### Visual Studioのログに表示されるエラー
104
-
105
- > CA1001: 型'App'は破棄可能なフィールド'notifyIcon'を所有しますが、破棄可能ではありません。
106
-
107
-
108
-
109
- ## 試した事
110
-
111
- クイックアクションとリファクタリングを参考に、```IDisposable```インターフェイスを実装しました。
112
-
113
-
114
-
115
- ```cs
116
-
117
- namespace SampleProject
118
-
119
- {
120
-
121
- /// <summary>
122
-
123
- /// App.xaml の相互作用ロジック
124
-
125
- /// </summary>
126
-
127
- public partial class App : Application, IDisposable
128
-
129
- {
130
-
131
-
132
-
133
- /// <summary>
134
-
135
- /// タスクトレイに表示するアイコンのコンポーネント
136
-
137
- /// </summary>
138
-
139
- private NotifyIconWrapper notifyIcon = new NotifyIconWrapper();
140
-
141
-
142
-
143
- public void Dispose()
144
-
145
- {
146
-
147
- throw new NotImplementedException();
148
-
149
- }
150
-
151
-
152
-
153
- /// <summary>
154
-
155
- /// System.Windows.Application.Exit イベントのラッパー
156
-
157
- /// </summary>
158
-
159
- /// <param name="e"></param>
160
-
161
- protected override void OnExit(ExitEventArgs e)
162
-
163
- {
164
-
165
- base.OnExit(e);
166
-
167
- this.notifyIcon.Dispose();
168
-
169
- }
170
-
171
- }
172
-
173
- }
174
-
175
- ```
176
-
177
-
178
-
179
203
  実装したところ別の警告が発生して、Appクラスそのものを大きく修正しないと解決出来ないエラーが発生しました。
180
204
 
181
205