- PR -

File.Exists を別スレッド化する。

投稿者投稿内容
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2008-05-21 18:54
開発環境は、VB 2005,.NET Framework 2.0 です。

File.Existsでネットワークパスが見つからない場合、アプリケーションがフリーズしてしまいます。
Delphiで別スレッド化しているのを見つけたのですが、VB2005でどうやったら実現できるか分かりません。

お分かりの方、是非ご享受ください。
宜しくお願い致します。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-05-21 19:06
どの部分がどんなふうにわからないんですか?

引用:

お分かりの方、是非ご享受ください。


とりあえず、Google 先生あたりに聞いてみるといいんじゃない?
http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL_jaJP270JP270&q=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89+.netframework+2.0&btnG=%E6%A4%9C%E7%B4%A2&lr=
_________________
かるあ のメモスニペット
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2008-05-21 19:33
早速の返答ありがとうございます。

googleで同じような質問をしているのをみつけたのですが、それはDelphiというものでした。
VB2005ではどうしたらよいのかがわかりません。
よろしくお願いします。



function FileExistTimeOut(const FileName:String;TimeOut:Cardinal=3000):Boolean;
var
FileExistsThread : TFileExistsThread;
TC : Cardinal;
begin
FileExistsThread := TFileExistsThread.Create(True);
FileExistsThread.FreeOnTerminate := True;
FileExistsThread.FileName := FileName;
FileExistsThread.Resume;

TC := GetTickCount;
while (FileExistsThread.Terminated = False) and (GetTickCount - TC < TimeOut) do
begin
;
end;

case FileExistsThread.Result of
-1://タイムアウト
begin
TerminateThread(FileExistsThread.Handle,0);
Result := False;
end;
0:Result := True;
1:Result := False;
else
Result := False;
end;
end;
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-05-21 19:39
で?どの部分のどんなふうにわからないんですか?
_________________
かるあ のメモスニペット
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2008-05-21 19:58
説明が足りなくてすみません。

File.Exists を別スレッドに立てて、どうしたらタイムアウト処理が出来るのかが分かりません。

Private Function FileExistTimeOut(ByVal FileName As String, ByVal TimeOut As Integer) As Boolean



End Function
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2008-05-21 21:06
引用:

jiioiさんの書き込み (2008-05-21 19:58) より:
File.Exists を別スレッドに立てて、どうしたらタイムアウト処理が出来るのかが分かりません。



それは私もいい方法を知りたいところです。

今のところ私はデリゲートを非同期で呼んでExistsを呼び出しています。
タイムアウトは「無かったことにする」という手を使っています。
つまり、キャンセルもなにもせず、放置して忘れます。

キャンセル時に別スレッドを強制的に削除すると
たまにリソースがリークしますので、
キャンセルは諦めています。

非同期デリゲートなら、忘れてしまえばいつか勝手に解放されます。

ご参考になれば。
また、他にいい方法があれば教えてください。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2008-05-22 00:23
とりあえず以下のサイトを全て読んで
分からなかったら具体的に質問されたほうがいいと思います。

記事一覧:CodeZine
http://codezine.jp/a/default/cid/279.aspx
jiioi
会議室デビュー日: 2007/09/27
投稿数: 14
投稿日時: 2008-05-22 09:01
れいさん、burton999さん、返信ありがとうございます。
burton999さんの記事をもう一度よく読んで、れいさんの非同期デリゲートを勉強してみます。

スキルアップ/キャリアアップ(JOB@IT)