teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ウィンドウメッセージ処理の追記

2018/05/16 02:43

投稿

garakutayama
garakutayama

スコア7

title CHANGED
File without changes
body CHANGED
@@ -94,8 +94,6 @@
94
94
 
95
95
  ### 追記① EverySecProcessの呼出元について
96
96
 
97
-
98
-
99
97
  スタートアップフォームに作成したtmr_OneSecのTickイベントにて呼んでいます。
100
98
 
101
99
  ```VB.NET
@@ -115,4 +113,35 @@
115
113
  End If
116
114
  End Sub
117
115
 
116
+ ```
117
+
118
+ ### 追記② ウィンドウメッセージの処理
119
+
120
+ 大変申し訳ありません。
121
+ 改めて見直したところ対象フォームのウィンドウメッセージをオーバーライドしていることが分かりました。
122
+ (デバイスの利用の為に作成したが消し忘れていたようです)
123
+
124
+ この関数をコメントアウトしたところ少し見た限りではモジュール①の状態でもリークしないようになりました。
125
+ しばらく様子を見たいと思います。
126
+
127
+ 画面更新等の処理はないとの間違った情報を提示してしまい申し訳ありませんでした。
128
+
129
+
130
+ また新たな疑問として下記の処理でリークする理由(なぜLabelのtextchangeでリークするのか)についても、詳しく調べていきたいと思います。
131
+
132
+ ```VB.NET
133
+ Protected Overrides Sub WndProc(ByRef m As Message)
134
+ SPREAD.SuspendLayout()'別のスプレッドシートの描画停止処理
135
+ Try
136
+ Select Case m.Msg
137
+ ''Case WINDOW_MESSAGE._DIOEVENT
138
+ ''SignalInput(Integer.Parse(m.WParam.ToString)) '監視対象の機器&立ち上がり信号の場合、信号受信処理実行
139
+ Case Else
140
+ MyBase.WndProc(m) '<フォームの標準処理の実行>
141
+ End Select
142
+ Catch ex As Exception
143
+ SaveErrorLog(MethodBase.GetCurrentMethod.Name, ex, "m:" & m.Msg)
144
+ End Try
145
+ SPREAD.ResumeLayout()
146
+ End Sub
118
147
  ```

1

早速の返信ありがとうございます。EverySecProcessの呼出元を質問文に追記しました。

2018/05/16 02:43

投稿

garakutayama
garakutayama

スコア7

title CHANGED
File without changes
body CHANGED
@@ -87,4 +87,32 @@
87
87
  - 開発環境
88
88
  開発ツール: Visual Studio 2012
89
89
  言語: VB.NET
90
- 対象のフレームワーク: .Net Flamework 4.5
90
+ 対象のフレームワーク: .Net Flamework 4.5
91
+
92
+
93
+
94
+
95
+ ### 追記① EverySecProcessの呼出元について
96
+
97
+
98
+
99
+ スタートアップフォームに作成したtmr_OneSecのTickイベントにて呼んでいます。
100
+
101
+ ```VB.NET
102
+
103
+ Private Sub tmr_OneSec_Tick(sender As Object, e As EventArgs) Handles tmr_OneSec.Tick
104
+ If MyStatus.IsInitialization Then '初期設定中はタイマー処理は実施しない
105
+ Exit Sub
106
+ End If
107
+
108
+ EverySecProcess() '毎秒処理の実行
109
+
110
+ If OneMinuteCount >= 59 Then '毎分処理の実行
111
+ OneMinuteCount = 0
112
+ EveryMinProcess()
113
+ Else
114
+ OneMinuteCount += 1
115
+ End If
116
+ End Sub
117
+
118
+ ```