- - PR -
Class_Terminate()が実行されるタイミングでプロパティは存在しますか?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-29 09:46
"End VB" の意味が良くわからないのですが、ローカル変数の場合は、 参照カウント法による作用で、そのプロシージャが終了されるタイミングで Terminate イベントが発生します。 これは、End Sub であろうと、Exit Sub であろうと同じです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-08-29 10:03
eterniaさん、ありがとうございます。
は先ほどじゃんぬねっとさんへのレスの通りという訳です。
IsFile()という名前と関数の内容があってないですね、 こちらは転記ミスではありません苦笑 スムーズに現状を理解していただく為にもソースをなるべく正確に転記するのが回答して頂く方への礼儀ですね。 質問する際は問題部分を正確に切り出せるように努力します。 | ||||||||
|
投稿日時: 2006-08-29 10:17
じゃんぬねっとさん、レスありがとうございます。
END VBは、Endステートメントのことを言っています。 http://msdn2.microsoft.com/ja-jp/library/0wt87xba.aspx 解説を見ると参照をすべて無効にするようですので、 仰られるとおりTeminateイベントが発生すると思われます。 ログを見る限りTerminateイベントが発生しないタイミングがあるように見えるのですが、 何分ログが不十分なので、ログの情報を増やしてTerminateイベントが発生しているか調べています。
フォーム名の後ろにスレッドIDを記述してLockFile.clsの生成・破棄のペアを明示的にしています。 | ||||||||
|
投稿日時: 2006-08-29 11:04
とはいえ、アンロックするメソッドを定義しておいて、 しかるべきタイミングで明示的にそのメソッドを呼ぶようにした方が良いですね。(可読性も良い) もちろん、Terminate でのアンロックも保険として、そのまま残します。 しかし、こういう排他ロックはリスキーなのでお勧めはできないですね。 ロック ファイルは、PHP くらいでしか使ったことがないですね。 (それも、配布しやすくするためという理由でやむなく) あまりお役に立てなくて申し訳ありません。 とりあえず、ログの調査を頑張ってください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-08-29 12:00
VB6.0で、Endステートメントを使用すると、Terminateは呼び出されません。
以下、VisualStudio6付属のMSDNより ------------------- メモ End ステートメントは、Unload、QueryUnload、および Terminate イベントまたはその他の Visual Basic コードが起動しなくても、即時にコードの実行を停止します。フォームおよびクラス モジュールの Unload、QueryUnload、および Terminate イベントに記述されたコードは実行されません。 ------------------- | ||||||||
|
投稿日時: 2006-08-29 13:51
y.oさん、解決しました。
もしかしたらと思い Endステートメントの手前で参照を Nothingにしてやったところ、 ロックファイルが削除されないという現象は起こらなくなりました。 ありがとうございました。 | ||||||||
|
投稿日時: 2006-08-29 14:01
じゃんぬねっとさん、解決しました。
ありがとうございました。 Endステートメントが原因だったようで、 その部分を訂正して、今のところ再現しておりません。
ご指摘ありがとうございます、 まずはアンロックするメソッドを明示的に呼び出すようにしました。 ちなみに、ファイル以外でのロックというとどういう方法が一般的になるのでしょうか? |