나는 database file system을 개발 중이다. 이것은 Windows 서비스이고 .net의 file system watcher 클래스를 사용하는 다중 디렉토리 감시자를 포함하고있다.각 파일 시스템 감시자에 별도의 스레드를 할당하는 방법은 무엇입니까?
별도의 스레드에서 각 감시자 클래스를 실행하고 싶습니다. 스레드는 "봉인되어"있기 때문에 .net에서 확장 할 수 없습니다. 내가 원하는 것은 관련된 스레드에서 Watcher 클래스의 모든 메서드를 실행하는 것입니다. 어떻게해야합니까? 편집
-
다음은 내 기본 감시자 클래스입니다. 다음
public abstract class WatcherBase
{
private IWatchObject _watchObject;
public WatcherBase() { }
public WatcherBase(IWatchObject watchObject, bool canPauseAndContinue)
{
_watchObject = watchObject;
CanPauseAndContinue = canPauseAndContinue;
}
public bool CanPauseAndContinue { get; set; }
public IWatchObject ObjectToWatch
{
get
{
return _watchObject;
}
}
public abstract void Start();
public abstract void Pause();
public abstract void Continue();
public abstract void Stop();
}
이 point.Please에서 WatcherBase 클래스
namespace RankFs.WatcherService
{
public class DirectoryWatcher : WatcherBase
{
private WatchDirectory _directoryToWatch;
private FileSystemWatcher _watcher;
public DirectoryWatcher(WatchDirectory directory, bool CanPauseAndContinue)
:base(directory ,CanPauseAndContinue)
{
_directoryToWatch = directory;
_watcher = new FileSystemWatcher(_directoryToWatch.Path);
_watcher.IncludeSubdirectories = _directoryToWatch.WatchSubDirectories;
_watcher.Created +=new FileSystemEventHandler(Watcher_Created);
//_watcher.Changed +=new FileSystemEventHandler(Watcher_Changed);
_watcher.Deleted +=new FileSystemEventHandler(Watcher_Deleted);
_watcher.Renamed +=new RenamedEventHandler(Watcher_Renamed);
}
public WatchDirectory DirectoryToWatch
{
get
{
return _directoryToWatch;
}
}
public override void Start()
{
_watcher.EnableRaisingEvents = true;
}
public override void Pause()
{
_watcher.EnableRaisingEvents = false;
}
public override void Continue()
{
_watcher.EnableRaisingEvents = true;
}
public override void Stop()
{
_watcher.EnableRaisingEvents = false;
}
private void Watcher_Created(object sender, FileSystemEventArgs e)
{
// adds a new file entry to database
}
private void Watcher_Deleted(object sender, FileSystemEventArgs e)
{
//updates the database(deleted file)
}
private void Watcher_Renamed(object sender, RenamedEventArgs e)
{
//updates the database(renamed file)
}
} }
내가 끼 었어에서 확장 내 디렉토리 감시자 클래스 도와입니다.
멀티 스레딩을 달성하는 방법에 대한 아이디어가 없습니다. 더 많은 도움을 주시기 바랍니다. 내 질문을 편집하고 참조 용 코드를 제공했습니다. 한번보세요. –
@Ravi 별도의 스레드에서 이벤트 처리기 메서드를 실행하기 위해 다른 작업을 수행 할 필요가 없습니다. – SpaceghostAli
이것은 제가 얻은 결과입니다. '주요 스레드 ID 12 파일 테스트 스레드 13 파일 테스트 스레드 13' 여전히 멀티 스레딩 없음. 왜 그렇습니까? –