
毎々参考にさせていただいております。
早速ですが質問させていただきます。
あるフォームでボタンが押された時に、下記の3つの処理でログを出力したい場合なのですが。
a) ボタンが押されたイベント処理
b) ボタンが押されたイベント処理の中で呼ばれるTestFunction1の中
c) ボタンが押されたイベント処理の中で呼ばれるTestFunction2の中
複数のメソッドに参照されるということで、StreamWriterのオブジェクトはインスタンスフィールドに宣言しています。
Public Class Test
'StreamWriter型のフィールド宣言
Private _sw As System.IO.StreamWriter
'ボタンクリックイベント処理
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me._sw = New System.IO.StreamWriter(filePath)
Using Me._sw
Me._sw.WriteLine("Button1はクリックされました")
Me.TestFunction1()
Me.TestFunction2()
End Using
End Sub
Private Sub TestFunction1()
'TODO:ここに処理
If Me._sw IsNot Nothing Then
Me._sw.WriteLine("TestFunction1は処理されました。")
End If
End Sub
Private Sub TestFunction2()
'TODO:ここに処理
If Me._sw IsNot Nothing Then
Me._sw.WriteLine("TestFunction2は処理されました。")
End If
End Sub
End Class
目的とする処理は実現されているのですが、このようなUsingの使い方は問題ないのでしょうか?
どなたかに御回答いただければうれしく思います。よろしくお願いいたします。
環境は下記のような感じです。
環境IDE:Visual Studio 2005
言語 :Visual Basic
No.1ベストアンサー
- 回答日時:
StreamWriterやGraphicsなども、Application終了後にガベージコレクターに引っ掛かり、最終的には .Net がメモリを解放するはずなのですが、これらはリソースの消費が激しいので、Application内で何回も作成されることを防ぐために、まめに Usingブロックか、Disposeメソッドでメモリを掃除しろ、というのがMSの推奨です。
_swは、使い切ってから End Using に達するので、問題ないように思えます。ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です(大きなお世話ですね)。
この回答への補足
ddtddtddtさん、早速の御回答ありがとうございます。
Usingの使い方として、
Private Sub TestFunction3()
Using sw As System.IO.StreamWriter = New System.IO.StreamWriter(filePath)
sw.WriteLine("テスト")
End Using
End Sub
というように、ローカルで宣言してその場で使い、メソッドをまたぐ様な使い方をしたことがなかったため、
質問内容のような書き方がありなのか??と思った次第です。
一応、質問内容のような場合とローカルのみで使う場合の両方のケースで、Usingブロックを抜けたあとの
StreamWriterオブジェクトの様子をウォッチで確認したところ、両方のケースで同じように動いていました。
(と思われます)
>ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です。
これについてですが、いつもこのように処理してしまっているのですが・・・。私の勉強不足です。
勉強になりました。御回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UNIX Cでの複数タイマー処理の...
-
メッセージボックスのボタン名変更
-
SDI形式での直接文字表示の方法...
-
選択状態の取得
-
VCでウエイトをミリ秒でかけ...
-
ボタンが押された事を検知する...
-
ACCESS側からEXCELの書式を設定...
-
VBSの処理中一旦処理を止めて再...
-
キーボード入力、マウス操作を...
-
Excel VBA で処理中断(DoEvents...
-
VB.NETで数秒間msgboxの...
-
EXCEL VBA「Application.Displa...
-
VBA メッセージボックスを自動...
-
MFCのワーカースレッドとUIスレ...
-
HTA(HTMLアプリケーション)にて...
-
PostMessageの連続送信
-
beforecloseの中からの抜け出し方
-
VBSで応答不要のメッセージボッ...
-
VB6でフォームをリロードしたい
-
【C#】 あるイベントから別イ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
ACCESS側からEXCELの書式を設定...
-
メッセージボックスのボタン名変更
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
Excel VBA で処理中断(DoEvents...
-
VBA、UserFormを前面に出力して...
-
Application.ScreenUpdating=Fa...
-
MFCのワーカースレッドとUIスレ...
-
ASP.NETでのメッセージ画面を出...
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
【C#】 あるイベントから別イ...
-
ボタンが押された事を検知する...
-
PostMessageの連続送信
-
VBA メッセージボックスを自動...
-
エクセルVBAでクリップボード内...
-
VCでウエイトをミリ秒でかけ...
-
ループを使わずに、特定時間に...
-
VB6 コマンドボタン クリック...
おすすめ情報