Dispose() の呼び出しがハングしているように見える FileSystemWatcher で奇妙な問題が発生し始めました。これはしばらく問題なく動作しているコードですが、.NET3.5 SP1 にアップグレードしたばかりなので、他の誰かがこの動作を見たかどうかを調べようとしています。FileSystemWatcher を作成するコードは次のとおりです。
if (this.fileWatcher == null)
{
this.fileWatcher = new FileSystemWatcher();
}
this.fileWatcher.BeginInit();
this.fileWatcher.IncludeSubdirectories = true;
this.fileWatcher.Path = project.Directory;
this.fileWatcher.EnableRaisingEvents = true;
this.fileWatcher.NotifyFilter = NotifyFilters.Attributes;
this.fileWatcher.Changed += delegate(object s, FileSystemEventArgs args)
{
FileWatcherFileChanged(args);
};
this.fileWatcher.EndInit();
これが使用されている方法は、TreeNode オブジェクトの状態イメージを更新することです (ビジネス固有の情報を削除するためにわずかに調整されています)。
private void FileWatcherFileChanged(FileSystemEventArgs args)
{
if (this.TreeView != null)
{
if (this.TreeView.InvokeRequired)
{
FileWatcherFileChangedCallback d = new FileWatcherFileChangedCallback(FileWatcherFileChanged);
this.TreeView.Invoke(d, new object[]
{
args
});
}
else
{
switch (args.ChangeType)
{
case WatcherChangeTypes.Changed:
if (String.CompareOrdinal(this.project.FullName, args.FullPath) == 0)
{
this.StateImageKey = GetStateImageKey();
}
else
{
projectItemTreeNode.StateImageKey = GetStateImageKey();
}
break;
}
}
}
}
不足しているものはありますか、それとも .NET3.5 SP1 からの異常ですか?