2012-01-13 15 views
1

こんにちは、私はいくつかの問題を抱えている、私は私が何をしようとしているHERESに基本的に新しいスレッドでXMLファイルを読み込む方法を不思議だった:新しいスレッドでXMLファイルを開く?

//This is ran when the user presses the Enter Key 
Thread LoadThread = new Thread(new ThreadStart(Test)); 
LoadThread.Start(); 

private static void Test() 
{ 
    FileStream stream = File.Open("TEST_1.xml", FileMode.Open); 
    //---- 
    // Code Using File (I know this stuff works) 
    //---- 
    stream.Close(); 
} 

ここでエラーがあります。

ディレクトリ\ TEST_1.xml 'は別のプロセスで使用されているためです。

しかし、それ自身のスレッドではうまくいきませんか?

このようにすることができない場合は、ファイルを開かなくてもプログラムをフリーズすることができますか?

もう一度ありがとうございます。

+0

プロセスエクスプローラを使用して、ファイルを読み込もうとしているときにファイルがロックされていることを確認しましたか? – RQDQ

+0

@Dusy - 非スレッドメソッドでそのファイルを開き、何が起こるのを見ますか? – adatapost

+0

'try'' catch'ブロックを置き、' finally'ブロックにストリームを閉じます。 'finally {stream.Close(); } 'try' stream.Flush(); '&' stream.Dispose(); 'これは役に立ちますか? –

答えて

1

私はあなたのサンプルコードを取ったが、問題に遭遇しなかった。しかし、ファイルを読み込んでいる間にEnterキーを押したときと同じ例外が発生しました。 (Enterキーを2回押す)Enterキーのハンドラが2つありますが、どちらもこのファイルを開くようにしていますか? File.Openステートメントにブレークポイントを設定して、例外が発生するまでに何回ヒットしたかを確認できますか?

+0

申し訳ありませんが、私は何かを試してみましょう – Dusty

+0

WOW、ありがとう、それはとてもシンプルだったと信じることはできません:)私はついに最後に他のことをやり遂げることができます – Dusty

+0

あなたのプロジェクトの残りの部分 –

0

ファイルに書き込んでいるコードまたはプロセスがありますか?もしそうなら、いくつかのロックを行う必要があります:

private static object _fileLock = new object(); 

private static void Test() 
{ 
    lock(_fileLock) 
    { 
     using(FileStream stream = File.Open("TEST_1.xml", FileMode.Open)) 
     { 
      //Stuff you know works 
     } 
    } 
} 
+0

あなたのコードを使用しようとしましたが、_fileLockは現在のコンテキストに存在しません、私はまだこのようなことに新しいです、助けてくれてありがとう、または何かがありますか? – Dusty

+0

Test()が宣言されているのと同じクラスに_fileLockを宣言しましたか? – RQDQ

+0

Void voidを作成しましたか? RQDQが彼の首都で混乱しているようだ。 – MyKuLLSKI

関連する問題