Je développe un database file system. Il comprend un observateur multi-répertoire qui est un service Windows et qui utilise la classe file system watcher de .net.Comment affecter un thread séparé à chaque gestionnaire de système de fichiers?
Je souhaite exécuter chaque classe d'observateur sur un thread séparé. Thread ne peut pas être étendu dans .net car il est "Scellé". Ce que je veux, c'est exécuter toutes les méthodes de ma classe watcher dans le fil connexe. Comment puis-je y parvenir?
EDIT -
Ce qui suit est ma classe de veilleur de base.
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();
}
Après est mon veilleur de répertoire classe étendue de la classe 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)
}
} }
Je suis coincé à ce point.Please me aider.
Je ne pouvais pas avoir une idée sur la façon de réaliser le multi threading. Pourriez-vous nous aider davantage? J'ai modifié ma question et fourni le code comme référence. Jetez un coup d'oeil. –
@Ravi Vous n'avez rien d'autre à faire pour que vos méthodes de gestionnaire d'événements s'exécutent sur un thread séparé. – SpaceghostAli
C'est la sortie que j'ai obtenue. 'Numéro de fil principal 12 Test de fichier Filetage 13 Test de fichier Filetage 13' Toujours pas de multithreading.Pourquoi? –