同時に2つ以上のファイルを処理しようとすると(それらは同時に作成され、フォルダーにダンプされます)、サービスが停止します。
スレッドを使用しようとしておらず、Watcher_Createdイベントですべての処理(ProcessFilesメソッドのコードが現在ある場所)があった場合、少なくとも1つのファイルが正常に処理されます。
スレッドを追加すると(これを行う必要があると確信していますが、スレッドを使用した正確なフローと構文が完全にわかりません)、ProcessFilesメソッドで次のメッセージを取得します。
System.ArgumentException:空のパス名は無効です。System.IO.FileStream.Init(String path、FileMode mode、FileAccess access、Int32 rights、Boolean useRights、FileShare share、Int32 bufferSize、FileOptions options、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath)
上記のメッセージは、using行で発生します。
private static void ProcessFiles()
{
try
{
Thread.Sleep(500);
GetCruiseLineShipName(fullFileName, ref cruiseLine, ref shipName);
using (StreamReader sr = new StreamReader(File.Open(fullFileName, FileMode.Open, FileAccess.Read, FileShare.Read)))
「fullFileName」は空の文字列であるため、これは明らかです。ただし、Watcher_Createdイベントで設定されます。
private static void Watcher_Created(object sender, FileSystemEventArgs e)
{
fullFileName = e.FullPath;
}
したがって、fullFileName変数が空の文字列である理由がわかりません。私はそれが私が試みている糸脱毛と関係があるに違いないことを知っています。
私のOnStartイベントは次のようになります。
protected override void OnStart(string[] args)
{
FileSystemWatcher Watcher = new FileSystemWatcher(@"C:\DropOff_FTP\MIS");
Watcher.EnableRaisingEvents = true;
Watcher.Created += new FileSystemEventHandler(Watcher_Created);
Watcher.Filter = "*.txt";
Watcher.IncludeSubdirectories = false;
Watcher.InternalBufferSize = 64;
Thread t = new Thread(new ThreadStart(ProcessFiles));
t.Start();
}
FileSystemWatcherを使用して、そこに同時にダンプされた複数のファイルを処理する方法を教えてください。スレッドを使用する必要がある場合、上記のコードに基づいてスレッドをどのように使用するかを教えてください。
ところで、私は4.0フレームワークを使用しています。