디렉토리에있는 내 파일 목록을 가져 와서 콘솔에 이름을 인쇄하는 동안 디렉토리에 새 파일을 추가합니다 (디렉토리는 FileSystemWatcher
으로 모니터링 됨). 그것의 이름, 그러나 그것은 예외를 던졌습니다 : 컬렉션이 수정되었습니다; 열거 연산이 실행되지 않을 수 있습니다.. iterating 중에 Watcher를 사용하여 실시간으로 목록에 항목 추가
이
코드입니다 :private static void Main(string[] args)
{
var myfiles = new List<string>();
myfiles = Directory.GetFiles(@"c:\items").ToList();
foreach (var file in myfiles)
{
Console.WriteLine(file);
}
}
public static void Run(List<string> myfiles)
{
var watcher = new FileSystemWatcher { Path = @"c:\items" };
watcher.Created += (source, e) =>
{
myfiles.Add(e.FullPath);
};
watcher.EnableRaisingEvents = true;
}
Q : 어떻게 내가 목록을 반복하고있는 동안 감시자를 사용하여 목록에 항목을 추가 할 수 있습니까? iterating하는 동안 RealTime에서 목록에 항목을 추가하는 다른 방법이 있습니까?
참고 : 디버깅에서 감시자가 목록에 항목을 올바르게 추가하는 것을 보았습니다.하지만 항목을 추가 한 후에는 예외가 발생합니다.
참고 : 또한 두 번째 스레드를 만들어 Watcher를 넣었습니다.
이 될 : 여기
은 작업 예입니다? 나는 당신이 (1) 콘솔 응용 프로그램이 시작할 때 폴더에있는 모든 파일을 나열하려고한다고 가정합니다. (2) 콘솔에 새 파일이 표시되면 폴더에 추가됩니까? –
그게 무슨 오류가 아니에요. 동일한 스레드에서 루프 내부에서 목록을 수정하려고하면 * 동일한 * 오류가 발생합니다. 실제로 FSW는 별도의 스레드를 사용하지 않습니다. –
동의 함, 어떤 스레드가 목록에 추가하려고하든 문제가되지 않습니다. 요점은 목록을 반복하면서 목록에 추가 할 수 없다는 것입니다. –