はまった。

どうも~。こんばんは。

どこのテレビもワールドカップ一色ですね。

今日は久々にVBではまりました。

すっぽりと・・・。

ログ出力用のクラスを作ってたんですが・・・・。

普通にべたに

FileOpen

PrintLine

の流れでやってたわけなんですが、

いかんせん

「ファイル名または番号が正しくありません」

というエラーがでまくり・・・。

悩みに悩んで悩みぬいた結果、

PrintLineがスレッドセーフじゃない!!!!!!!!!!

おえええええええええええええええ。

まじでーーーーーーーーーー!

そうか。なるほど。デリゲートでマルチスレッド化しているメソッドから、

呼び出してしまってたわけですね。

うーむ。参った。

というわけで

StremWriterに変更。

StreamWriterはスレッドセーフの模様。

見事さっくさくに動きました。

正直自分なりにSyncLockなど使用して、スレッドセーフにしたはずだったんですが。。。。

また話が違ったみたいですね。

本来SyncLockなどはオブジェクト内の変数の不整合の回避などに使うらしい。

大きな勘違いでした。

PrintLineメソッド自体スレッドセーフじゃないと無理なのか~。

ということでおなじみ参考サイトは@IT

@IT:連載:.NETマルチスレッド・プログラミング入門 第3回 マルチスレッドでデータの不整合を防ぐための排他制御

デリゲートで余裕かましてたらこういうところで引っかかるんですね・・・。

普通のメソッドのように意識せず非同期デリゲートを扱ってた報いでしょうか(苦笑)

ではでは。またの機会に。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。